java如何将List<Person>转换为Map<String,List<Double>>而不是Map<String,List<Person>>?
考虑到Person
类有三个字段name(字符串)、age(int)、salary(double)
我想创建一个映射,名称为key,值为salary(而不是Person
对象本身),如果key不是唯一的,那么使用linkedList保存所有重复key的值
我指的是下面链接中给出的解决方案: Idiomatically creating a multi-value Map from a Stream in Java 8 但仍不清楚如何创建以Salary为值的hashmap
我可以用forEach()创建map<String, List<Double>>
。代码如下:
List<Person> persons= new ArrayList<>();
persons.add(p1);
persons.add(p2);
persons.add(p3);
persons.add(p4);
Map<String, List<Double>> personsByName = new HashMap<>();
persons.forEach(person ->
personsByName.computeIfAbsent(person.getName(), key -> new LinkedList<>())
.add(person.getSalary())
);
但我正在尝试使用“groupingBy&;collect”来创建地图。
如果我们想要Person
对象本身作为值,那么下面给出了代码:
Map<String, List<Person>> personsByNameGroupingBy = persons.stream()
.collect(Collectors.groupingBy(Person::getName, Collectors.toList()));
但我想创建一个以薪水为值的地图,如下所示:
Map<String, List<Double>>
如何实现这种情况
# 1 楼答案
创建一个映射,然后对每个项目执行一个forEach,检查你的映射是否有特定的键,如果没有,则放置新键并清空列表以收集数据。检查下面的代码