使用Guava Library从数组列表中获取非过滤项

时间:2016-02-15 10:19:33

标签: data-structures collections guava

我可以使用波纹管功能根据我的过滤条件获取所有项目,但我还需要未过滤的项目列表,我的意思是说isGroup为true的项目我可以很容易地得到它但是无法获得其项目isGroup是真的,我不想为同一个任务使用另一个过滤器,有没有为此功能构建?

  final Collection nonGroupItems= Collections2.filter(rosterList, new Predicate<Roster>() {
            @Override
            public boolean apply(Roster input) {
                return  ! input.getIsGroup();
            }
        });

1 个答案:

答案 0 :(得分:3)

是。您可以使用Multimaps.index(Iterable, Function)通过某个键(在本例中为isGroup)对值进行索引/分组/分区。然后,您可以访问每个值列表:isGroup返回true的值的一个列表和isGroup返回false的值的另一个列表。

e.g:

final ImmutableListMultimap<Boolean, Roster> rostersByIsGroup = Multimaps.index(rosterList,
        new Function<Roster, Boolean>() {
            @Override
            public Boolean apply(Roster input) {
                return input.getIsGroup();
            }
        });
final ImmutableList<Roster> groupItems = rostersByIsGroup.get(true);
final ImmutableList<Roster> nonGroupItems = rostersByIsGroup.get(false);

如果你使用的是Java 8:

final ImmutableListMultimap<Boolean, Roster> rostersByIsGroup = Multimaps.index(rosterList,
        Roster::getIsGroup);
final ImmutableList<Roster> groupItems = rostersByIsGroup.get(true);
final ImmutableList<Roster> nonGroupItems = rostersByIsGroup.get(false);