是否有内置的方法或方法组合可以使用谓词返回Guava ImmutableMultimaps的过滤视图,就像使用常规map一样?
似乎没有接受ImmutableMultimap作为参数的Maps.filter方法。查看应用程序接口,我可以调用asMap()并获得多重映射的基于映射的视图,然后以这种方式执行过滤。然而,我需要从我的函数返回一个ImmutableMultimap,由于显而易见的原因,没有一种方法可以将Map>视为ImmutableMultimap -而不必构造新的Multimap。
即使我可以将其作为一个映射进行过滤,并将其转换回一个ImmutableMultimap,因为它们都只是视图(我认为?),过滤器方法也只能让我对整个集合进行过滤,而不是删除单个值。
发布于 2012-01-21 00:13:08
Multimaps.filterEntries是在版本11中添加到Guava中的。
发布于 2011-06-07 00:32:08
您可以尝试使用ForwardingMultimap并在查询映射时应用过滤器,而不是复制完整的不可变的多映射,例如
@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);
}诸若此类。
发布于 2011-06-06 01:15:47
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);
}有没有内置的方法...
不是的。
https://stackoverflow.com/questions/6233745
复制相似问题