Объясняя свои сомнения из предложения:
До сих пор я думал о комбинировании гуавы с beanutils Apache, но
это не кажется элегантным.
Java, несмотря на свою популярность, не обладает первоклассной функцией поддержкой *, что может быть изменено в Java 8 , где вы будете находиться в состоянии сделать:
Iterable <Person> filtered = filter(allPersons, (Person p) -> acceptedNames.contains(p.getName()));
С лямбдами и будет элегантно.
До этого у вас есть выбор между:
- олдскульный путь (как писал @Louis)
- подробный фильтр гуавы (ответ @ JB)
- или другие функциональные библиотеки Java (ответ @ superfav).
Я также хотел бы добавить к ответу @ Lois, что Guava-way будет создавать неизменную коллекцию , потому что они лучше, чем неизменяемые , что также описано в 1032 * Элемент 15, Минимизировать изменчивость в Эффективная Java Джошуа Блоха **:
ImmutableList.Builder<Person> builder = ImmutableList.builder();
for (final Person p : allPersons) {
if (acceptedNames.contains(p.getName())) {
builder.add(p);
}
}
ImmutableList<Person> filtered = builder.build();
(это детали реализации, которые ImmutableList.Builder
создает временные ArrayList
под капотом).
*: меня это очень беспокоит, я пришел из миров Python, JavaScript и Perl, , где функции обрабатываются лучше
**: Гуава и Блох тесно связаны во многих отношениях;)