我想制定一种方法来检查是否可以查看每堆中是否有6张卡片。这是我的方法
public boolean checkIfPileHasSixCards() {
map.put("tpile1", tpile1);
map.put("tpile2", tpile2);
map.put("tpile3", tpile2);
for (ArrayList<Card> value : map.values()) {
int size=value.size();
if(size==6) {
return true;
}
}
return false;
}
我的逻辑是否正确,是否有更有效的方法可以遍历值并检查每个值(ArrayList)的大小是否为6?
最佳答案
在循环内返回true
是不正确的-这样,如果地图中的任何列表包含六个元素,则方法将返回true
,而如果其中的所有都这样做,则您的方法将返回false
。相反,如果列表没有六个元素,则应返回true
,并且仅在完成值迭代后才返回ojit_code:
for (List<Card> value : map.values()) {
int size = value.size();
if(size != 6) {
return false;
}
}
return true;
注意,顺便说一句,使用Java 8的流可以使此代码段更加整洁。它不会更高效(在最坏的情况下它仍然是O(n)运算),但绝对会更简洁:
return map.values().stream().allMatch(l -> l.size() == 6);