0
过滤和转换Map
的值的最有效方法是什么?我习惯于使用FluentIterable
进行这些操作,但它不适用于Map
。番石榴 - 过滤和转换图
是Maps.transformValues(Maps.filterValues(map, predicate), function)
的最佳选择?
过滤和转换Map
的值的最有效方法是什么?我习惯于使用FluentIterable
进行这些操作,但它不适用于Map
。番石榴 - 过滤和转换图
是Maps.transformValues(Maps.filterValues(map, predicate), function)
的最佳选择?
基本的解决方案是,如果你知道你将使用Map
的唯一方法是迭代条目完全一次,那么你有什么好。但是,如果您打算使用get
,put
或者如果您可能会多次迭代它,则建议新建一个Map
,以便过滤和变换的工作只进行一次。
Maps.newHashMap(Maps.transformValues(Maps.filterValues(map, predicate), function));
的filter
和transform
的顺序是正确的在这里,让你这样做会被过滤不transform
值。
快速浏览一下[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
你的意思是我应该在最后制作一张新地图,或者在'filterValues'之后? – 2014-09-24 20:28:50
这取决于你如何使用'Map'。装饰器'Map '的主要内存开销是装饰器函数。无论何时访问装饰器Map (s),通常都会遇到这两个函数的复杂性。 –
Jason
2014-09-24 20:37:57