首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过滤Guava多映射

过滤Guava多映射
EN

Stack Overflow用户
提问于 2011-06-04 08:00:20
回答 4查看 5.7K关注 0票数 19

是否有内置的方法或方法组合可以使用谓词返回Guava ImmutableMultimaps的过滤视图,就像使用常规map一样?

似乎没有接受ImmutableMultimap作为参数的Maps.filter方法。查看应用程序接口,我可以调用asMap()并获得多重映射的基于映射的视图,然后以这种方式执行过滤。然而,我需要从我的函数返回一个ImmutableMultimap,由于显而易见的原因,没有一种方法可以将Map>视为ImmutableMultimap -而不必构造新的Multimap。

即使我可以将其作为一个映射进行过滤,并将其转换回一个ImmutableMultimap,因为它们都只是视图(我认为?),过滤器方法也只能让我对整个集合进行过滤,而不是删除单个值。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-21 00:13:08

Multimaps.filterEntries是在版本11中添加到Guava中的。

票数 16
EN

Stack Overflow用户

发布于 2011-06-07 00:32:08

您可以尝试使用ForwardingMultimap并在查询映射时应用过滤器,而不是复制完整的不可变的多映射,例如

代码语言:javascript
复制
@Override
public boolean containsKey(@Nullable Object key) {
  if (!keyFilter.apply(key))
    return false;
  return super.containsKey(key);
}

@Override
public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
  ..
}

@Override
public Collection<V> get(@Nullable K key) {
  if (!keyFilter.apply(key))
    return Collections.emptyList();
  return Collections2.filter(delegate().get(key), valueFilter);
}

诸若此类。

票数 4
EN

Stack Overflow用户

发布于 2011-06-06 01:15:47

代码语言:javascript
复制
public static <Type1, Type2> ImmutableMultimap<Type1, Type2> dFilter(
        ImmutableMultimap<Type1, Type2> data,//
        Predicate<Type1> predicate//
) {
    Multimap<Type1, Type2> result = HashMultimap.create();
    for (Type1 t1 : data.keys())
        if (predicate.apply(t1))
            for (Type2 t2 : data.get(t1))
                result.put(t1, t2);

    return ImmutableMultimap.copyOf(result);
}

有没有内置的方法...

不是的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6233745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档