2014-09-24 85 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值。