我有一个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()方法在这种情况下不起作用。
答案 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
}
说明: