【发布时间】:2021-09-03 00:36:33
【问题描述】:
我在尝试使用流处理地图时遇到问题。 我有:
Class Person {
public String name;
public String ID;
}
还有 2 个不同的地图(结构相同但包含不同的元素):
Map<String, List<Person>> map1 = new HashMap<>();
map1.put("group1", new Person("abc", "12345"));
map1.put("group2", new Person("def", "23456"));
和
Map<String, List<Person>> map2 = new HashMap<>();
map2.put("group3", new Person("asd", "12345"));
我想要做的是使用流来处理这两个地图,并过滤掉 Map
{group1,("abc", "12345")}
{group2,("def", "23456")}
这是我当前的实现:
Map<String, List<Person>> result = map1.entrySet()
.stream()
.filter(x -> x.getValue().stream().allMatch(e -> e.getID() !=
map2.entrySet().stream().flatMap(it -> it.getValue().stream().forEach(y -> y.getID()))))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
我对 Stream 不熟悉,不胜感激。
谢谢
【问题讨论】:
-
您的地图是人员列表的 ID,但是您将一个人放入其中。数据结构到底是什么?
-
那不是ID,只是组名
-
在
map1中,您对同一张地图使用相同的密钥,但对不同的人使用。值类型为List<Person>。您需要在要求之前和之后显示您的确切要求。如果您不熟悉流,为什么不使用其他方法。 -
没有流我需要使用循环来处理这两个地图,你猜这很耗时?我想要做的是合并这两个地图,并确保合并后我没有具有相同 ID 的人
-
@HaoR 在您将
map1定义为Map<String, List<Person>>的问题中。但是map1.put("group1", new Person("abc", "12345"));这个语句只有在你的地图是Map<String, Person>时才会编译
标签: java filter java-8 java-stream