Ответ от @Kartik работает. Но если вы хотите избежать каста, у вас есть еще две опции:
Опция 1:
Comparator<Car> com1 = Comparator.comparing(car -> car.getDriver().getGender());
Comparator<Car> com2 = Comparator.comparing(car -> car.getDriver().getAge());
, затем:
cars.stream().sorted(com1.thenComparing(com2)).collect(Collectors.toList());
Опция 2:
Сообщите компилятору, что вы сравниваете Car
s:
cars.stream().sorted(Comparator.comparing((Car car) -> car.getDriver().getGender())
.thenComparing(car -> car.getDriver().getAge()))
.collect(Collectors.toList());
EDIT: На самом деле, у вас есть еще больше вариантов. Согласно комментарию @Andreas, вы можете передать тип по Comparator.<Car, String>comparing
или просто написать свою собственную comparing
функцию, которая будет выглядеть следующим образом:
sorted((car1, car2) -> {/*function body that returns -1, 0, 1 */}
Кроме того, если у вас есть List<Car>
, выхотите отсортировать, вы можете напрямую использовать sort()
метод:
cars.sort(com1.thenComparing(com2));