Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据一个字段对数据列表进行分组_Java_Algorithm_Stream_Java Stream - Fatal编程技术网

Java 如何根据一个字段对数据列表进行分组

Java 如何根据一个字段对数据列表进行分组,java,algorithm,stream,java-stream,Java,Algorithm,Stream,Java Stream,我有一个自定义类数据列表,我想根据一个字段对它们进行分组,值应该是另一个字段。以下面的例子为例 List<Student> list = new ArrayList<>(); list.add(new Student(1001, "Class 1", "Jon")); list.add(new Student(1002, "Class 1", "Eliana")); list.add(new

我有一个自定义类数据列表,我想根据一个字段对它们进行分组,值应该是另一个字段。以下面的例子为例

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"));
我想使用Java8流特性来实现这一点。我试着这样做,我可以将整个对象分组到一个映射中,因为关键是类名和值是一个学生列表。但我的要求是获得值,因为只有一个学生姓名列表

{"Class 1" -> ["Jon", "Eliana", "Ram", "Mohan"]}
{"Class 2" -> ["Piter", "Anderson"]}
{"Class 3" -> ["Joy"]}
我的代码是这样的:

list.stream().collect(Collectors.groupingBy(Students::getClass));

从上述注释部分可以通过以下方式完成:

Map<EligibilityRequest, List<List<String>>> result = 
  list.stream()
    .collect(Collectors.groupingBy(Student::getClass,
      Collectors.mapping(Student::getName,  toList())
    ));
映射结果=
list.stream()
.collect(收集器).groupingBy(学生::getClass,
映射(Student::getName,toList())
));

您可以使用
映射
收集器:
list.stream().collect(收集器.groupingBy(Student::getClass,收集器.mapping(Student:getName,toList()))谢谢,伙计,它似乎在工作。你可以把它作为一个答案添加进来,这样其他人就可以很容易地得到它。