如何将不同的列表分组到另一个列表中?

时间:2012-09-12 17:38:00

标签: java jpa collections

我的列表包含三个级别的列表。我使用JPA从三个不同的数据库表中获取这些数据。

更多细节,我有三个不同的对象(组,类型,项目):一个包含类型列表的组,其中包含一个项目列表。

我想从不同的类型和组中只获得几个项目,并像列表一样返回此项目。

问题是:有一种优雅而简单的方法吗?或者我真的需要获得所有项目并逐级对它们进行分组?

1 个答案:

答案 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