Guavaは素晴らしい解決策を提供するかもしれません:
Predicate<Group> matchingGroup = ...;
Predicate<Type> matchingType = ...;
Function<Group, Type> getType = new Function<Group, Type>(){};
Function<Type, Item> getItem = new Function...;
// starting point
List<Group> myGroups;
Iterable<Item> filteredItems =
Iterables.transform(
Iterables.filter(
Iterables.transform(
Iterables.filter(myGroups, matchingGroup),
getType),
matchingType),
getItem);
または拡張:
// starting point
List<Group> myGroups;
Iterable<Type> types = Iterables.transform(
Iterables.filter(myGroups, matchingGroup),
getType);
Iterable<Item> items = Iterables.transform(
Iterables.filter(types, matchingType),
getItem);
これを短縮するために述語/関数composeメソッドを使用する方法があるかもしれません。
グアバはここにあります