我的列表包含三个级别的列表。我使用JPA从三个不同的数据库表中获取这些数据。
更多细节,我有三个不同的对象(组,类型,项目):一个包含类型列表的组,其中包含一个项目列表。
我想从不同的类型和组中只获得几个项目,并像列表一样返回此项目。
问题是:有一种优雅而简单的方法吗?或者我真的需要获得所有项目并逐级对它们进行分组?
答案 0 :(得分:1)
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);
可能有一种方法可以使用Predicates / Functions compose方法来缩短它。
番石榴是here