gpt4 book ai didi

Java8 : How to filter a map of List value via stream

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:07 24 4
gpt4 key购买 nike

我仍然是 Java 8 的初学者。我被困在过滤列表值的 map 上。这是我的代码

public class MapFilterList {
private static Map<String, List<Person>> personMap = new HashMap<>();

public static void main(String[] args) {
Person p1 = new Person("John", 22);
Person p2 = new Person("Smith", 45);
Person p3 = new Person("Sarah", 27);

List<Person> group1 = new ArrayList<>();
group1.add(p1);
group1.add(p2);

List<Person> group2 = new ArrayList<>();
group2.add(p2);
group2.add(p3);

List<Person> group3 = new ArrayList<>();
group3.add(p3);
group3.add(p1);

personMap.put("group1", group1);
personMap.put("group2", group2);
personMap.put("group3", group3);

doFilter("group1").forEach(person -> {
System.out.println(person.getName() + " -- " + person.getAge());
});

}

public static List<Person> doFilter(String groupName) {
return personMap.entrySet().stream().filter(key -> key.equals(groupName)).map(map -> map.getValue()).collect(Collectors.toList());
}
}

我怎样才能更正doFilter方法,因为错误告诉我 cannot convert from List<List<Person>> to List<Person> .

最佳答案

如果我没理解错的话,您需要以下代码:

public static List<Person> doFilter(String groupName) {
return personMap.entrySet().stream()
.filter(entry -> entry.getKey().equals(groupName))
.map(entry -> entry.getValue())
.flatMap(List::stream)
// as an option to replace the previous two
// .flatMap(entry -> entry.getValue().stream())
.collect(Collectors.toList());
}

关于Java8 : How to filter a map of List value via stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42337320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com