我有一个ArrayList,每次运行程序时,该列表中都会随机填充GameObj
个实例。
如果某个对象与ArrayList中的另一个对象进行接触,则会将一个名为visible
的布尔值从true
设置为false
。
是否可以通过以下方法检查ArrayList中的所有项目实例是否都设置为false
:
XXXX.visible = false
一旦我可以检查它们是否都设置为false
。
答案 0 :(得分:5)
您可以使用Stream.noneMatch()
进行此操作:
if (bricks.stream().noneMatch(GameObj::isVisible)) {
doStuffIfAllBricksAreInvisible();
}
如果所有砖块都不可见,则返回true。
另外,我建议看看Stream.allMatch()
,如果列表中的所有元素都与给定谓词匹配,则返回true。
使用allMatch()
看起来像这样:
if (bricks.stream().allMatch(b -> !b.isVisible())) {
doStuffIfAllBricksAreInvisible();
}
要完成此操作,您还可以查看Stream.anyMatch()
,如果其中一个元素与给定谓词匹配,则返回true。
答案 1 :(得分:1)
我建议使用anyMatch,因为列表为空时allMatch方法返回true
if (!bricks.stream().anyMatch(GameObj::isVisible)) {
// TODO when visible balls not found (all are invisible)
}
答案 2 :(得分:0)
如果您使用的是Java <8,则一种方法是在初始化时将arraylist的大小存储在变量中(比如说变量名为count)。
将标志从true更改为false时,将计数减少1。如果flag已经为false,则不执行任何操作。现在,您只需检查计数是否为0。
如果count为0,则打印“做得好,游戏结束”,否则继续游戏。
对于Java 8或更高版本,您可以按照其他答案中的建议使用流API。