Прежде всего, я должен отметить, что если вы просто хотите новый ArrayList
, содержащий соответствующие элементы, то способ, которым вы сделали это в своем примере, вполне подойдет. Пока у Java нет лямбда-выражений, вы не станете проще или лучше выглядеть, чем это.
Поскольку вы пометили это как гуава , вот как вы могли бы сделать это с Гуавой. Вы в основном фильтруете исходный список по составу предиката (== Color.Red
) и функции (pojo.getColour()
). Так что, если у вас был статический финал Function<Pojo, Colour>
с именем COLOUR
на Pojo
(например, так):
public static final Function<Pojo, Colour> COLOUR =
new Function<Pojo, Colour>() {
@Override public Colour apply(Pojo input) {
return input.getColour();
}
};
вы можете создать эту комбинацию так:
Predicate<Pojo> isRedPojo = Predicates.compose(
Predicates.equalTo(Colour.Red), Pojo.COLOUR);
Затем можно создать отфильтрованное представление исходного списка:
Iterable<Pojo> redPojos = Iterables.filter(pojoList, isRedPojo);
И вы можете скопировать это отфильтрованное представление в ArrayList
, если хотите:
List<Pojo> copy = Lists.newArrayList(redPojos);