2014-09-24 90 views
0

过滤和转换Map的值的最有效方法是什么?我习惯于使用FluentIterable进行这些操作,但它不适用于Map番石榴 - 过滤和转换图

Maps.transformValues(Maps.filterValues(map, predicate), function)的最佳选择?

+0

快速浏览一下[javadocs](http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/index.html),其中显示'transformValues'和'filterValues'返回装饰器。所以'get','put'等的复杂性取决于'filter'和'transform'函数的复杂性。完整的副本*可能会更有效率。 – Jason 2014-09-24 18:29:45

+0

你的意思是我应该在最后制作一张新地图,或者在'filterValues'之后? – 2014-09-24 20:28:50

+0

这取决于你如何使用'Map '。装饰器'Map '的主要内存开销是装饰器函数。无论何时访问装饰器Map (s),通常都会遇到这两个函数的复杂性。 – Jason 2014-09-24 20:37:57

回答

0

基本的解决方案是,如果你知道你将使用Map的唯一方法是迭代条目完全一次,那么你有什么好。但是,如果您打算使用getput或者如果您可能会多次迭代它,则建议新建一个Map,以便过滤和变换的工作只进行一次。

Maps.newHashMap(Maps.transformValues(Maps.filterValues(map, predicate), function)); 

filtertransform的顺序是正确的在这里,让你这样做会被过滤不transform值。