Есть ли способ (метод, лямбда или элегантная конструкция), чтобы найти элемент в списке на основе данного компаратора?Список :: содержит с компаратором
Я написал метод, как это:
private static <T> boolean contains(List<T> list, T item, Comparator<? super T> comparator) {
return list.stream()
.anyMatch(listItem -> comparator.compare(listItem, item) == 0
);
}
Но я ищу, чтобы заменить его чем-то, что было бы более элегантно.
Я не хочу, чтобы добавить какую-либо зависимость, поэтому не гуава, «обыкновенные» и т.д. Я действительно искал довольно способ сделать это в Java 8.
EDIT: Some пример того, что Я бы рассмотреть более изящным (здесь является использование кода):
// sadly, this method doesn't exist
// nor is there a static one in Collections
// but maybe you can think of another way?
if (list.containsSame(item, comparator)) {
// ...
}
Ну, как код, который вы пишете, удовлетворяет вас? Это выглядит просто отлично (хотя в сигнатуре я бы поставил вместо этого «Компаратор super T>») – fge
Я чувствую, что это можно улучшить с помощью умного использования платформы или языка. – ymajoros
, используя потоки со своими собственными компараторами, - это в значительной степени то, что большинство людей назвали бы «умным использованием фреймворка». То же самое самое «красивое» из-за лямбда. Чего еще можно хотеть? – specializt