【问题标题】:How to check a list result as a HashMap value for a given String如何检查列表结果作为给定字符串的 HashMap 值
【发布时间】:2017-04-11 09:41:58
【问题描述】:

我有一个 HashMap。我想检查我的单个数组列表(nodeList)值是否包含在我的 HashMap 的值中。为了访问我的地图中给定方式元素的节点值,我使用了 getNodes 方法,它的输出如下:

getNodes() 返回一个列表输出:[元素 N847744431 ({}),元素 N847744763 ({})]

public class RoadNetwork{

   public void checkContent(){
    for(int i =0; i < nodeList.size(); i++){
            /* Does node(i) belong in the valueList of Way? */
         Set<Map.Entry<String, Element>> entrySet = wayList.entrySet();
            for (Map.Entry entry : entrySet){
               Way w1 = (Way) wayList.get(entry.getKey());
               //Check if Way contains node(i)
                if(w1.getNodes().contains(nodeList.get(i))){
                    System.out.println("Found something");
                }
            }
        }
    }
}

public class Way{

  public List<Node> getNodes(){
      return nodes; 
  }
}

我可以做些什么来解决这个问题,我想检查我的 hashmap 中的给定值,但是 .contains() 方法在这种情况下不起作用。

【问题讨论】:

标签: java hashmap


【解决方案1】:

(编辑:哎呀!我没有看到这个问题是旧的。我会保留答案记录)

另一种解决方案是使用 flatmap 函数构造地图上包含的节点列表,然后应用带有谓词的 anyMatch 来测试地图上是否存在 nodeList.get(i)。

Boolean exists = wayList.values().stream().flatMap(Collection::stream).anyMatch(element -> element.equals(nodeList.get(i));

当然,您应该为您的 Node 类型定义 equals 和 hashcode 函数。

【讨论】:

    【解决方案2】:

    你的例子不清楚。对于“如何检查多个值中的一个值是否在 HashMap 中”的问题,答案如下:

    // to check if at least one element of 'list' is present in 'map'
    if(list.stream().filter(l -> map.containsKey(l)).collect(Collectors.toSet()).size() > 0) {
        // do stuff
    }
    

    解释:

    • 我正在使用 Java8 的 Streams API。
    • list.stream() 将从列表的元素中创建一个流,以便可以对每个元素应用一些 lambda 函数(函数式编程结构)。
    • filter(l -> map.containsKey(l)) 函数将检查列表中的哪些元素存在于地图中。过滤器函数的输出将是列表和地图中都存在的另一个元素流。
    • Collectors.toSet() 函数会将此流转换为 Set。它可以是列表或其他集合,由您选择。
    • size() 函数只检查结果集是否为空。如果为空,则列表和映射中没有共同的元素,否则映射中至少存在列表的一个元素。

    【讨论】:

    • 我很欣赏这个问题不是很清楚,因为它的性质是从我的程序中取出的。但是你能解释一下你的 if 语句是如何工作的吗?
    • 声明不言自明,仍然添加了解释。
    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多