Comparator.comparing для сортировки списка с использованием поля вложенного объекта - PullRequest
3 голосов
/ 28 марта 2020

Я хочу отсортировать список, который выглядит ниже, на основе атрибута вложенного класса.

class Test {
      private NestedClass nestedClass;
      private AnotherNested anotherNested;
      private int id;
     //getter, setter
}

class NestedClass {
    private String field1;
    private int field2;
    // getter,setter
}

List<Test> tests = service.getTests(string something);

Я хочу отсортировать тесты по field1 в nestedClass, используя Comparator. Сравнение . Я попробовал ниже, который, кажется, не работает

tests.stream().sorted(Comparator.comparing(test->test.getNestedClass().getField1()));

1 Ответ

2 голосов
/ 28 марта 2020

Вы вызываете sorted API для Stream, но не собираете отсортированный поток в List<Test> далее. Никакая операция не выполняется с помощью строки кода, которую вы использовали по той же причине.

Чтобы выполнить операцию на месте, вы должны скорее вызывать sort API на интерфейсе List как:

tests.sort(Comparator.comparing(test -> test.getNestedClass().getField1()));

Или завершите потоковую операцию, собирая данные как терминальную операцию, как в:

List<Test> sortedTests = tests.stream()
        .sorted(Comparator.comparing(test->test.getNestedClass().getField1()))
        .collect(Collectors.toList());
...