Java 如何使用流API比较两个具有不同值的映射?
有两个映射和一个接受它们并返回新映射的方法。 映射包含相同数量的相同键,但它们的值它们是不同的Java 如何使用流API比较两个具有不同值的映射?,java,java-stream,Java,Java Stream,有两个映射和一个接受它们并返回新映射的方法。 映射包含相同数量的相同键,但它们的值它们是不同的 Map<String, Boolean> a = new HashMap<>(); Map<String, Boolean> b = new HashMap<>(); a.put("a", false); a.put("b", true); a.put("c&
Map<String, Boolean> a = new HashMap<>();
Map<String, Boolean> b = new HashMap<>();
a.put("a", false);
a.put("b", true);
a.put("c", true);
b.put("a", true);
b.put("b", true);
b.put("c", false);
public static Map<String, Boolean> getNewMap(Map<String, Boolean> a, Map<String, Boolean> b)
{
Map<String, Boolean> newMap = new HashMap<>();
for (Map.Entry<String, Boolean> mapB : b.entrySet())
for (Map.Entry<String, Boolean> mapA : a.entrySet()) {
if (mapB.getKey().equals(mapA.getKey()) &&
!mapB.getValue().equals(mapA.getValue())) {
newMap.put(mapB.getKey(), mapB.getValue());
}
}
return newMap;
}
该方法查找相同的键,并将键和第二个映射的不同值写入新映射
该方法的结果将是包含以下元素的映射:
a:是的
c:错
如何通过使用流API和lambda表达式替换循环和条件来减少代码量?流化第二个映射并收集与第一个映射具有不同值的所有条目
如果可以修改原始b,则不需要流操作,编辑:只需使用removeAll,如果不可以,则可以先制作副本
b.entrySet().removeAll(a.entrySet());
System.out.println(b);
输出是您所说的您想要的:
{a=true,c=false}
多亏厄立特里亚人建议撤军而不是撤军,这是一个明显的进步
如果为了不修改原件b而需要复制,我建议
Map<String, Boolean> result = new HashMap<>(b);
result.entrySet().removeAll(a.entrySet());
两张地图的键是否保证相同?如果它们不是,您希望发生什么?我建议使用removeAll而不是removeIf,这样可以减少比较的需要。b、 entrySet.removeAlla.entrySet;返回b@厄立特里亚的建议显然很好,非常感谢。我编辑过。
b.entrySet().removeAll(a.entrySet());
System.out.println(b);
Map<String, Boolean> result = new HashMap<>(b);
result.entrySet().removeAll(a.entrySet());