我可以使用波纹管功能根据我的过滤条件获取所有项目,但我还需要未过滤的项目列表,我的意思是说isGroup为true的项目我可以很容易地得到它但是无法获得其项目isGroup是真的,我不想为同一个任务使用另一个过滤器,有没有为此功能构建?
final Collection nonGroupItems= Collections2.filter(rosterList, new Predicate<Roster>() {
@Override
public boolean apply(Roster input) {
return ! input.getIsGroup();
}
});
答案 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);