Я хочу отсортировать список внутри объекта с помощью компараторов Java 8.
Может кто-нибудь помочь мне заменить это здесь -> thenComparing (???)
@Test
public void testSort() {
// given
List<Person> values = Lists.newArrayList(
new Person("you", Lists.newArrayList(new Todo("A"))),
new Person("me", Lists.newArrayList(new Todo("B"), new Todo("A"), new Todo("C"))),
new Person("me", Lists.newArrayList(new Todo("A"))),
new Person("me", Lists.newArrayList(new Todo("D")))
);
// when
List<Person> result = values
.stream()
.sorted(Comparator
.comparing(Person::getName))
.thenComparing(???) <-- TODO
.collect(Collectors.toList());
// then
assertEquals(4, result.size());
Person person_1 = result.get(0);
assertEquals("me", person_1.getName());
assertEquals(1, person_1.getTodos().size());
assertEquals("A", person_1.getTodos().get(0).getName());
Person person_2 = result.get(1);
assertEquals("me", person_2.getName());
assertEquals(3, person_2.getTodos().size());
assertEquals("A", person_2.getTodos().get(0).getName());
assertEquals("B", person_2.getTodos().get(1).getName());
assertEquals("C", person_2.getTodos().get(2).getName());
Person person_3 = result.get(2);
assertEquals("me", person_3.getName());
assertEquals(1, person_3.getTodos().size());
assertEquals("D", person_3.getTodos().get(0).getName());
Person person_4 = result.get(3);
assertEquals("you", person_4.getName());
assertEquals(1, person_4.getTodos().size());
assertEquals("A", person_4.getTodos().get(0).getName());
}
@Data
@AllArgsConstructor
class Todo {
private String name;
}
@Data
@AllArgsConstructor
class Person {
private String name;
private List<Todo> todos;
}
Ожидаемый результат сортировки:
Персона (имя = я, задачи = [Todo (имя = A)])
Персона (имя = я, задачи = [Todo (имя = A), Todo (имя = B), Todo (имя = C)])
Персона (имя = я, задачи = [Todo (имя = D)])
Персона (имя = вы, todos = [Todo (имя = A)])