Java Lambda表达式流两个具有相同键和不同对象列表的映射

时间:2017-07-10 09:30:52

标签: java lambda java-8

我有两张地图:

Map<A, List<B>> map1 = new HashMap<>();

并且

Map<A, List<C>> map2 = new HashMap<>();

其中C是B中的嵌套对象,如下所示:

public class B {

private C c;

}

我想在map1中过滤以排除map2中具有相同键的所有条目,A from map1 = A from map2B.C in map1 = C in map2

结果将是:

Map<A, List<B>> map1 = new HashMap<>();

1 个答案:

答案 0 :(得分:1)

这个怎么样?如果A的{​​{1}}包含在map1的条目中,则使用Collection#removeIfC中删除所有B条目。

map2

改为使用Stream#filter

map1.entrySet().removeIf(entry -> entry.getValue().stream().anyMatch(
        b -> map2.getOrDefault(entry.getKey(), emptyList()).contains(b.c)
));