【发布时间】:2019-01-23 08:20:59
【问题描述】:
考虑Person类有name(String)、age(int)、salary(double)三个字段。
我想创建一个名称为键、值作为薪水的映射(而不是Person 对象本身),如果键不唯一,则使用linkedList 保存所有重复键的值。
我指的是下面给出的链接中给出的解决方案: 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>>
如何实现这个场景?
【问题讨论】:
标签: java java-8 java-stream multimap