考虑到
如果键名不唯一,则使用LinkedList来保存所有重复键的值,我想创建一个以name为键,以salary为值的映射(而不是
我参考了下面链接中给出的解决方案:Idiomatically creating a multi-value Map from a Stream in Java 8但仍然不清楚如何创建值为Salary的HashMap。
我可以使用forEach()方法创建
如何实现这种情况?
Person
类有三个字段:name(String),age(int),salary(double)。如果键名不唯一,则使用LinkedList来保存所有重复键的值,我想创建一个以name为键,以salary为值的映射(而不是
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>>
如何实现这种情况?