0

3つのレベルのリストを含むリストがあります。JPAを使用して、3つの異なるデータベーステーブルからこのデータを取得しています。

詳細については、3つの異なるオブジェクト(グループ、タイプ、アイテム)があります。アイテムのリストを含むタイプのリストを含むグループです。

さまざまなタイプとグループからいくつかのアイテムのみを取得し、このアイテムをリストのように返したいです。

問題は、これを行うためのエレガントでシンプルな方法はありますか?または、本当にすべてのアイテムを取得して、レベルごとにグループ化する必要がありますか?

4

1 に答える 1

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);

これを短縮するために述語/関数composeメソッドを使用する方法があるかもしれません。

グアバはここにあります

于 2012-09-12T17:53:52.667 に答える