我正在尝试从“高级操作”部分的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我该如何运作?
2 回答
![?](http://img1.sycdn.imooc.com/545868550001f60202200220-100-100.jpg)
慕后森
TA贡献1802条经验 获得超5个赞
结合使用Collectors.groupingBy和Collectors.mapping
Map<Integer, List<String>> result = persons.stream()
.collect(Collectors.groupingBy(p -> p.age,
Collectors.mapping(p -> p.name, Collectors.toList())));
![?](http://img1.sycdn.imooc.com/545862e700016daa02200220-100-100.jpg)
交互式爱情
TA贡献1712条经验 获得超3个赞
你可以这样做
Map<Integer, List<String>> namesByAge = persons.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toList())));
您必须首先根据人员的年龄将其分组,然后获取具有该年龄的人员的姓名,最后使用下游收集器进行收集。
添加回答
举报
0/150
提交
取消