У меня есть список с некоторыми объектами User, и я пытаюсь отсортировать список, но работает только с использованием ссылки на метод, с лямбда-выражением компилятор выдает ошибку:
List<User> userList = Arrays.asList(u1, u2, u3);
userList.sort(Comparator.comparing(u -> u.getName())); // works
userList.sort(Comparator.comparing(User::getName).reversed()); // works
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
Ошибка:
com\java8\collectionapi\CollectionTest.java:35: error: cannot find symbol
userList.sort(Comparator.comparing(u -> u.getName()).reversed());
^
symbol: method getName()
location: variable u of type Object
1 error
источник
Вы можете обойти это ограничение, используя два аргумента
Comparator.comparing
соComparator.reverseOrder()
вторым аргументом:источник
users.sort(reverseOrder(comparing(User::getName)));
.reverseOrder(Comparator<T>)
выше метод находитсяjava.util.Collections
вComparator
.