我的列表包含三个级别的列表。我使用 JPA 从三个不同的数据库表中获取这些数据。
关于更多细节,我有三个不同的对象(组、类型、项目):一个包含类型列表的组,其中包含项目列表。
我只想从不同的类型和组中获取几个项目,然后像列表一样返回这些项目。
问题是:有没有一种优雅而简单的方法来做到这一点?还是我真的需要获取所有项目并逐级分组?
我的列表包含三个级别的列表。我使用 JPA 从三个不同的数据库表中获取这些数据。
关于更多细节,我有三个不同的对象(组、类型、项目):一个包含类型列表的组,其中包含项目列表。
我只想从不同的类型和组中获取几个项目,然后像列表一样返回这些项目。
问题是:有没有一种优雅而简单的方法来做到这一点?还是我真的需要获取所有项目并逐级分组?
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 方法来缩短它。
番石榴来了