Самый чистый способ найти объекты, соответствующие определенным критериям в java.util.List? - PullRequest
4 голосов
/ 22 октября 2008

Я мог бы написать себе вспомогательный класс, который делает это, когда ему предоставляется функтор, но мне было интересно, есть ли лучший подход или что-то уже есть в стандартной библиотеке (кажется, что должно быть).

Ответы, которые я нашел в StackOverflow, все для C #, что мне не помогает.

Спасибо

Ответы [ 6 ]

5 голосов
/ 22 октября 2008

Нет - нет. В Apache commons-collections есть предикаты для такого рода вещей, но результирующий код (использующий анонимные внутренние классы), как правило, уродлив и затрудняет отладку.

Просто используйте базовый цикл for , пока они не принесут замыкания в язык

3 голосов
/ 15 мая 2010

Querydsl предоставляет эту функцию также через свой модуль Коллекций. Я предвзят, так как я поддерживаю модуль, но я считаю, что учитывая ограничения Java 6, это вариант.

В Java 7 будут замыкания, которые позволяют фильтровать через замыкания, что делает использование внешних библиотек менее необходимым.

3 голосов
/ 14 января 2010

Например, используя библиотеку lambdaj , вы можете найти лучших пользователей репутации следующим образом:

List<User> topUsers = 
    select(users, having(on(User.class).getReputation(), greaterThan(20000)));

Она имеет некоторые преимущества по сравнению с библиотекой Quaere, потому что она не использует магическую строку, она полностью безопасна и, по моему мнению, предлагает более читаемый DSL.

2 голосов
/ 22 октября 2008

Существует JXPath .

1 голос
/ 23 октября 2008

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .

1 голос
/ 22 октября 2008

Можно попробовать Quaere . Я этим не пользовался, но выглядит интересно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...