如何将列表结果检查为给定String的HashMap值

时间:2017-04-11 09:41:58

标签: java hashmap

我有一个HashMap。我想检查我的个人arraylist(nodeList)值是否包含在我的HashMap的值中。为了访问我的Map中给定方法元素的节点值,我使用了getNodes方法,该方法具有如下输出:

getNodes()返回一个列表<>输出:[Element N847744431({}),Element 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()方法在这种情况下不起作用。

2 个答案:

答案 0 :(得分:2)

(编辑:糟糕!我没有看到问题已经过时了。我会保留答案以备记录)

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

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

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

答案 1 :(得分:0)

你的例子不清楚。对于“如何检查多个值中的值是否在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函数。
  • 过滤器(l - &gt; map.containsKey(l))函数将检查列表中哪些元素存在于地图中。 filter函数的输出将是列表和映射中存在的另一个元素流。
  • Collectors.toSet()函数会将此流转换为Set。它也可以是List或其他一些集合,您的选择。
  • size()函数只检查结果集是否为空。如果它为空,则列表和地图中的元素都不常见,否则列表中至少有一个元素出现在地图中。