Java 8 ( 2014 ) решает эту проблему, используя потоки и lambdas в одной строке кода:
List beerDrinkers = persons.stream()
.filter(p -> p.getAge() > 16).collect(Collectors.toList());
Используйте Collection#removeIf
, чтобы изменить коллекцию на месте. (Примечание: в этом случае предикат будет удалять объекты, которые удовлетворяют предикату):
persons.removeIf(p -> p.getAge() <= 16);
lambdaj позволяет фильтровать коллекции без пишущих циклов или внутренних классов:
List beerDrinkers = select(persons, having(on(Person.class).getAge(),
greaterThan(16)));
Можете ли вы представить что-то более читаемое?
Отказ от ответственности: я являюсь автором lambdaj