【发布时间】:2020-07-15 11:11:56
【问题描述】:
我有一个自定义类数据列表,我想根据一个字段对它们进行分组,并且值应该是另一个字段。举个例子吧。
List<Student> list = new ArrayList<>();
list.add(new Student(1001, "Class 1", "Jon"));
list.add(new Student(1002, "Class 1", "Eliana"));
list.add(new Student(1003, "Class 2", "Piter"));
list.add(new Student(1004, "Class 3", "Joy"));
list.add(new Student(1005, "Class 2", "Anderson"));
list.add(new Student(1006, "Class 1", "Ram"));
list.add(new Student(1007, "Class 1", "Mohan"));
现在我想根据类别对这些数据进行分组。预期的输出应该是一个映射,其中包含作为类的键和作为学生姓名列表的值。
{"Class 1" -> ["Jon", "Eliana", "Ram", "Mohan"]}
{"Class 2" -> ["Piter", "Anderson"]}
{"Class 3" -> ["Joy"]}
我想使用 java 8 流功能来获得它。我尝试这样做,我可以将整个对象分组到一个地图中,因为键是类名,值是学生列表。但我的要求是获得价值作为唯一的学生姓名列表。
我的代码是这样的:
list.stream().collect(Collectors.groupingBy(Students::getClass));
【问题讨论】:
-
您可以使用
mapping收藏者:list.stream().collect(Collectors.groupingBy(Students::getClass,Collectors.mapping(Student:getName,toList()))); -
谢谢老兄,它似乎工作了
-
您可以将其添加为答案,以便其他人轻松获得。
标签: java algorithm stream java-stream