При инициализации коллекций, таких как TreeMap
, TreeSet
и т. Д. Мы можем добавить наш собственный компаратор.Код выглядит примерно так:
Map<Integer, String> map1 = new TreeMap<>(new Comparator<Integer>() {
public int compare(Integer x, Integer y) {
return x-y;
}
});
Теперь мы можем заменить анонимную реализацию лямбда-выражением.Код будет выглядеть так:
Map<Integer, String> map2 = new TreeMap<>((x,y) -> x-y);
Java-8 позволяет хранить лямбда-выражения в переменной через функциональные интерфейсы .Поэтому я изменил приведенный выше код следующим образом:
BiFunction<Integer, Integer, Integer> myComparator = (x,y) -> x-y;
Map<Integer, String> map3 = new TreeMap<>(myComparator);
Но эта последняя попытка не сработала!Он выдал следующую ошибку:
Невозможно определить аргументы типа для TreeMap <>
Почему не удалось разрешить типы в последнем примере?
Примечание. Чтобы подтвердить, что это не ошибка IDE, я выполнил необработанную компиляцию, используя javac
, и она все еще выдавала ту же ошибку.