Существует ли Java 1.5, эквивалентный методам Predicate<T> в .Net?

StackOverflow https://stackoverflow.com/questions/787446

Вопрос

В частности, я ищу аналогичную чистую нотацию для Collection<T>.TrueForAll / Exists, и т.д.

Кажется неприятным писать цикл foreach для проверки возврата метода для каждого объекта, поэтому я надеюсь, что для этого есть лучшая идиома Java.

Это было полезно?

Решение

Предикаты предоставляются в Коллекции Google библиотека.

Другие советы

Функциональная Java обеспечивает первоклассные функции.Предикат выражается как F<T, Boolean>.Например, вот программа, которая проверяет массив на наличие строки, состоящей из строчных букв.

import fj.F;  
import fj.data.Array;  
import static fj.data.Array.array;
import static fj.function.Strings.matches;

public final class List_exists {  
  public static void main(final String[] args) { 
    final Array<String> a = array("Hello", "There", "how", "ARE", "yOU?");  
    final boolean b = a.exists(matches.f("^[a-z]*$"));  
    System.out.println(b); // true
  }  
}

Насколько я знаю, нет.Но Apache Коллекции Commons есть что-то вроде этого: Predicate


Редактировать:Верно, как отмечалось в комментариях, коллекции Commons относятся к миру до создания дженериков, так что Коллекции Google (Обновить: Гуава) сейчас кажется явно лучшим вариантом.Тем не менее, Commons Collections заслуживает упоминания, поскольку это хорошо известная библиотека, которая делает это, а также для того, чтобы люди знали почему не использовать его.:)

Я просто читал больше о коллекциях Google в этом разделе приятное интервью с его основными разработчиками и хотел бы процитировать немного, что конкретно касается "Коллекций Google противПроблема с коллекциями Apache Commons":

В чем уникальность вашего подхода?Чем она отличается, например, коллекция Апач Викискладе?

Кевин:"Что ж, слава Богу за Apache Commons.Мы все были бы в плохом состоянии без подобных библиотек.Это говорит о том, что, к сожалению, этот конкретный проект застопорился в мире до появления дженериков.Они действительно хотят использовать дженерики, но они признают, что это потребовало бы довольно нетривиального и несовместимого переписывания.До сих пор, кажется, никто не будет активно управляя такие усилия.В Google мы используем Java 5 В масштабах всей компании с весны 2005 года.То, что библиотека коллекций не была обобщена, нарушило условия сделки для нас, потому что мы действительно ненавидим получать предупреждения компилятора.Я также был обеспокоен многими местами, в которых коллекции Apache не соответствуют спецификациям интерфейсов JDK, которые они реализуют. "

[...]

Джаред:"Как подразумевает Кевин, наша библиотека это единственная известная мне библиотека collections за пределами JDK, созданная на Java 5 особенности:обобщения, перечисления, ковариантные возвращаемые типы и т.д.При написании кода Java 5 требуется библиотека коллекций , которая в полной мере использует преимущества языка .Кроме того, мы приложили огромные усилия для создания библиотеки полной, надежной и совместимой с классами коллекции JDK.Наши классы коллекционирования были намного более ограниченными изначально, но мы постепенно улучшали их в течение последних двух лет.Поскольку вся библиотека используется в системе управления версиями Google , у нас появилась возможность гибко изменять общедоступные интерфейсы.Проект с открытым исходным кодом такой как Apache Commons Collection, не имеет свободы изменять свое поведение после первоначального выпуска.Поскольку мы потеряем эту гибкость после выхода Библиотеки коллекций Google 1.0 , мы с нетерпением ждем отзывов сейчас, чтобы мы могли все исправить ".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top