【问题标题】:How to check values in hashmap如何检查哈希图中的值
【发布时间】:2019-03-05 07:44:22
【问题描述】:

我想创建一个方法来检查我是否可以查看我的每一堆是否有 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?

【问题讨论】:

  • 哦哦哦,愚蠢的错误!除此之外的一切都好吗

标签: java loops dictionary arraylist hashmap


【解决方案1】:

在循环内返回 true 是不正确的 - 这样,如果地图中的 any 列表有六个元素,而不是 all,您的方法将返回 true > 他们中的一个。相反,如果列表没有六个元素,则应返回 false,并且仅在完成对值的迭代后返回 true

for (List<Card> value : map.values()) {
      int size = value.size();
      if(size != 6) {
          return false;
      }
}
return true;

请注意,顺便说一下,使用 Java 8 的流可以使这个 sn-p 更干净。它不会更高效(在最坏的情况下它仍然是 O(n) 操作),但它肯定会更简洁:

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

【讨论】:

  • 在我看来,从代码来看,OP 正在创建 Map 只是为了循环它。我不确定Map 是否是必需的。
  • size 变量是多余的,恕我直言。
  • 我还能如何一次循环遍历多个数组列表?
  • @NicholasK 我想进行最少量的更改以使 OP 的代码正常工作,但我同意,您可能会丢失并直接使用 value.size()
  • 硬编码对我需要检查的 12 个数组列表有效吗?我觉得遍历 HashMap 比再次全部输入要容易。我刚刚在这里添加了两个数组列表来检查我的方法是否正常,但我现在已经添加了另外十个。
猜你喜欢
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多