我正在尝试从高级操作部分的http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/修改源代码,以获取结果类型为Map<Integer, List<String>>
而不是其中值是串联字符串的Map<Integer, String>
多个值。
List<Person> persons =
Arrays.asList(
new Person("Max", 18),
new Person("Peter", 23),
new Person("Pamela", 23),
new Person("David", 12)
);
Map<Integer, String> collect = persons.stream()
.collect(Collectors.toMap(p -> p.age, p -> Arrays.asList(p -> p.name)));
我得到的错误是:
错误:(32,25)java:不兼容的类型:推断变量U具有不兼容的绑定
相等约束:java.lang.String
下限:java.util.List
我如何使其工作?
答案 0 :(得分:1)
您可以这样做
Map<Integer, List<String>> namesByAge = persons.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toList())));
您必须首先根据人员的年龄将其分组,然后获取具有该年龄的人员的姓名,最后使用下游收集器进行收集。
答案 1 :(得分:1)
结合使用Collectors.groupingBy
和Collectors.mapping
Map<Integer, List<String>> result = persons.stream()
.collect(Collectors.groupingBy(p -> p.age,
Collectors.mapping(p -> p.name, Collectors.toList())));