猿问

在从流中收集的地图中将a列为值

我正在尝试从“高级操作”部分的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


我该如何运作?


至尊宝的传说
浏览 118回答 2
2回答

慕后森

结合使用Collectors.groupingBy和Collectors.mappingMap<Integer, List<String>> result = persons.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.groupingBy(p -> p.age,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Collectors.mapping(p -> p.name, Collectors.toList())));

交互式爱情

你可以这样做Map<Integer, List<String>> namesByAge = persons.stream()&nbsp; &nbsp; .collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toList())));您必须首先根据人员的年龄将其分组,然后获取具有该年龄的人员的姓名,最后使用下游收集器进行收集。
随时随地看视频慕课网APP

相关分类

Java
我要回答