如果ArrayList中的所有对象共享一个公共值,则返回true的java
我有一个对象的ArrayList,对象是一个指令类,它有以下变量:toDelete、toUse、ID和executed。为了让程序完成,我只需要在ArrayList的所有执行布尔值成员都返回true时才返回true
public boolean getComplete() {
for (int i = 0; i < instructionArea.size(); i++) {
if (instructionArea.get(i).getExecuted() == false) {
instructionsCompleted = false;
return instructionsCompleted;
} else
instructionsCompleted = true;
}
System.out.println(instructionsCompleted);
return instructionsCompleted;
}
这是我目前为止的工作,但我知道这是错误的,程序执行不正确。任何帮助都将不胜感激,谢谢
谢谢你们的回复,我实际上意识到我在其他地方的代码中有一些错误,这导致了它无法工作。指令在本应执行之前就被设置为“已执行”。哦,好吧!谢谢大家
# 1 楼答案
假设变量
instructionArea
和instructionsCompleted
是在其他地方定义的,并且对该函数可见,那么您的算法看起来很好。也就是说,这里有两个增强功能,可以使代码更易于阅读(因此也更易于调试)请注意,我重新构造了函数,以接收
ArrayList
的Booleans
作为参数。在您的例子中,您将用Instruction
对象替换Boolean
,用instruction.getExecuted()
替换bool
对于每个循环
由于您使用的是ArrayList,it's a little more efficient使用for each循环而不是索引。考虑下面这样的函数。p>
Java的流式API
您还可以使用Java's Streaming API将此函数一行删除
# 2 楼答案
如果所有元素都从
getExecuted()
返回true
,那么您的逻辑可以表示为返回true
,这段代码正好反映了这一点它还使用了method reference(而不是lambda),这使得IMHO的代码更加优雅
# 3 楼答案
让我们检查一下问题:
当一切都为真时,您希望返回真
你可以颠倒这个要求:
当只有一个为false时返回false
按照这种逻辑,您可以执行以下操作:
# 4 楼答案
或者你做一个相反的操作来保存另一行:)它的流API的样式如下;“是否存在任何匹配,尚未执行)