Если вы хотите, чтобы вывод состоял из ссылки между именем студента A
и такими отметками, как 2.10
и 10.2
, то вам нужно либо вывод Map<String, List<Mark>>
, либо использовать текущий List<Student
, то есть просто отсортировано, как вам нужно:
Вывод List<Student>
:
return stds.stream()
.sorted(Comparator.comparing(Student::getName)) // sort Students by name
.map(student -> new Student( // with sorted marks
student.getName(), // - same name
student.getMarks().stream() // - sorted marks
.sorted(Comparator.comparingDouble(Marks::getPoints)) // -- comparing points
.collect(Collectors.toCollection(LinkedHashSet::new)))) // -- as LinkedHashSet
.collect(Collectors.toList()); // as List<Student>
[Студент (имя = A, оценки = = Оценки (баллы = 2,1), Оценки ( очки = 10,2)]),
студент (имя = B, оценки = [Fooarks (очки = 13,0), оценки (очки = 15,0)]),
студент (имя = C, marks = [Marks (points = 7.0), Marks (points = 20.0)])]
Если вы находите Map<String, List<Mark>>
как-то более подходящим, тогда обратите внимание на реализацию TreeMap
сортирует ключи:
return stds.stream()
.collect(Collectors.toMap( // Map<String, List>
Student::getName, // the key
student -> student.getMarks().stream() // the value (sorted)
.sorted(Comparator.comparingDouble(
Marks::getPoints))
.collect(Collectors.toList()),
(o1, o2) -> o1, // merge BinaryOperator
TreeMap::new)); // requested implementation
{A = [Foo.Marks (points = 2.1), Foo.Marks (points = 10.2)],
B = [Foo .Marks (точки = 13,0), Foo.Marks (точки = 15,0)],
C = [Foo.Marks (точки = 7,0), Foo.Marks (точки = 20,0)]}