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;