Nip*_*pun 4 java multimap java-8 java-stream
考虑Person类有三个字段名称(String),age(int),salary(double).
我想创建一个名称为键和值为pay(而不是Person对象本身)的映射,如果key不唯一,则使用linkedList保存所有重复键的值.
我指的是下面给出的链接中给出的解决方案: 在Java 8中从流中以惯用方式创建多值Map 但仍不清楚如何使用Salary作为值创建hashmap.
我可以map<String, List<Double>>用forEach()创建.代码如下:
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())
);
Run Code Online (Sandbox Code Playgroud)
但我正在尝试使用"groupingBy&collect"来创建地图.如果我们想将Person对象本身作为值,则代码如下:
Map<String, List<Person>> personsByNameGroupingBy = persons.stream()
.collect(Collectors.groupingBy(Person::getName, Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)
但是我想创建一个薪水作为价值的地图,如下所示:
Map<String, List<Double>>
Run Code Online (Sandbox Code Playgroud)
如何实现这种情况?
您可以使用Collectors.mapping将Person实例映射到相应的工资:
Map<String, List<Double>> salariesByNameGroupingBy =
persons.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.mapping(Person::getSalary,
Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |