如何检查哈希映射中的值

4

我想编写一个方法来检查每堆牌中是否有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?


哦,糟糕!愚蠢的错误!除此之外一切都还好吗? - Clyde
1个回答

3
在循环内部返回true是不正确的。这样做会导致如果地图中的任何列表有六个元素,你的方法将返回true,而不是所有的列表都有六个元素时才返回true。相反,如果一个列表没有六个元素,则应该返回false,并且只有在迭代完所有值后才返回true。请保留HTML标记。
for (List<Card> value : map.values()) {
      int size = value.size();
      if(size != 6) {
          return false;
      }
}
return true;

顺便提一下,使用Java8的流操作可以让这段代码更简洁。它并不会变得更有效率(在最坏情况下仍然是O(n)的操作),但肯定会更加简明:

return map.values().stream().allMatch(l -> l.size() == 6);

从代码看来,我认为OP只是为了循环而创建了Map。我不确定是否需要这个Map - Boris the Spider
size 变量在我看来是多余的。 - Nicholas K
2
@NicholasK 我希望尽可能少地更改 OP 的代码使其工作,但我同意,你可以直接使用 value.size() - Mureinik
@Clyde,最简单的方法是什么?- 你已经声明了变量,所以只需硬编码即可。x1.size() == 6 && x2.size() == 6 等等。 - Boris the Spider
1
硬编码对于我需要检查的12个ArrayList是否有效?我觉得通过HashMap迭代会比重新输入所有内容更容易。我只是添加了两个ArrayList来检查我的方法是否正确,但现在我已经添加了其他十个。 - Clyde
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接