Java 为什么在Guava中没有用于ListMultiMaps的filterValues()方法?

Java 为什么在Guava中没有用于ListMultiMaps的filterValues()方法?,java,guava,multimap,Java,Guava,Multimap,我面临的实际问题是根据任意/灵活的谓词过滤ListMultimap的值 谓词过滤器条件=i->i>42; ListMultimap myMap=MultimapBuilder.hashKeys().arrayListValues().build(); //填充我的地图。。。 //下面的代码不起作用 myMap=Multimaps.FilterValue(myMap,filterCondition); 最后一行不起作用,因为Guava没有ListMultimap筛选值(ListMultimap未

我面临的实际问题是根据任意/灵活的
谓词
过滤
ListMultimap
的值

谓词过滤器条件=i->i>42;
ListMultimap myMap=MultimapBuilder.hashKeys().arrayListValues().build();
//填充我的地图。。。
//下面的代码不起作用
myMap=Multimaps.FilterValue(myMap,filterCondition);
最后一行不起作用,因为Guava没有
ListMultimap筛选值(ListMultimap未筛选,最终谓词
myMap.get(index)
将需要线性时间执行,但通常
List
实现提供恒定时间
get
。这与此相同

确实,
get
通常只在固定时间内执行。值得注意的是,
LinkedList
本身对于大多数用例来说都是错误的选择,所以我们通常不想遵循它的先例

最重要的是,我们有点后悔我们所有的懒散计算的“视图”集合——我们所有的集合过滤和转换。因此,这是不提供更多此类API的更多理由

Predicate<Integer> filterCondition = i -> i > 42;
ListMultimap<String, Integer> myMap = MultimapBuilder.hashKeys().arrayListValues().build();
// populate myMap ...

// below does not work 
myMap = Multimaps.filterValues(myMap, filterCondition);
ListMultimap<String, Integer> myNewMap = MultimapBuilder.hashKeys().arrayListValues().build();
myMap.entries().stream().filter(e -> filterCondition.test(e.getValue()))
    .forEach(e -> myNewMap.put(e.getKey(), e.getValue()));
myMap = myNewMap;