【问题标题】:Checking that at least Value in HashMap matches?检查 HashMap 中的至少 Value 是否匹配?
【发布时间】:2016-06-26 21:07:08
【问题描述】:

我正在尝试弄清楚如何遍历我的 HashMap 以查看其中的至少一个值是否与我正在寻找的匹配。

for(int i=0; i<allDogsInkennels.size(); i++){
    Map<String, DogStatus> allDogsStatus = allDogsInKennels.get(i).getAllStatuses();

}

如何在此处添加If statement / loop 以检查至少一个状态是否匹配,例如“已批准”。

注意: String= Dogs Id ,DogStatus= 显示狗状态的枚举

【问题讨论】:

    标签: java for-loop hashmap


    【解决方案1】:

    您可以遍历地图并在遇到匹配时停止:

    boolean found = false;
    for (DogStatus value : allDogsStatus.values()) {
        if (value == DogStatus.APPROVED) {
            found = true;
            break;
        }
    }
    

    更好的方法是将上面的代码重构为一个返回boolean的函数。

    编辑:我为不记得containsValue 方法而感到愚蠢。这可能是最好的方法,即使复杂性相同。

    【讨论】:

      【解决方案2】:
      if (allDogsStatus.containsValue(DogStatus.APPROVED)) {
          // ...
      }
      

      【讨论】:

      • 这似乎是所有解决方案中最优雅的,它是否会一一遍历键值对以检查状态?
      • 一般来说是的,它会迭代,但是这取决于Map的实现。
      • 是的。如果你想避免这种情况,你将不得不使用另一种数据结构。如果你有适当的封装,你可以在设置状态的地方添加一些代码并做一些额外的计算。
      • @JimmyJames 是的,像Map&lt;DogStatus, Set&lt;String&gt;&gt; dogsByStatus; 一样保持并行可以帮助解决这类问题。
      • @Radiodef 对。我也为这类问题实现了自定义数据结构(包装标准数据结构),但一般来说,除非这种情况经常出现,否则它是矫枉过正的。我不熟悉任何为价值搜索提供任何优化的地图,但它们可能存在
      猜你喜欢
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2021-05-14
      • 2015-09-22
      相关资源
      最近更新 更多