考虑到Person
类有三个字段名称(字符串),年龄(INT),(双薪)。
我想创建一个名字为键和值作为薪水的地图(而不是Person
对象本身),如果关键不是唯一的,然后使用链表来保存所有重复键的值。
我指的是在下面给出的链接中给出的解决方案:惯用从流中的Java 8创建多值映射 ,但仍不清楚如何与薪酬创造的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())
);
但我想用“groupingBy和收集”创建地图。如果我们想要Person
对象本身作为值,那么代码下面给出:
Map<String, List<Person>> personsByNameGroupingBy = persons.stream()
.collect(Collectors.groupingBy(Person::getName, Collectors.toList()));
但是我要像下面给出创建与工资作为价值的地图:
Map<String, List<Double>>
如何实现这个场景?
您可以使用Collectors.mapping
到地图Person
实例相应的工资:
Map<String, List<Double>> salariesByNameGroupingBy =
persons.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.mapping(Person::getSalary,
Collectors.toList())));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句