2013-06-19 61 views
2

所以我想實現的東西,需要一個排序數量>地圖的價值,如:Google Guava TreeMultimap - 基於排序的排序檢索值?

<San Francisco -> 10, Seattle -> 20, LA -> 10}. 

值不一定是截然不同的。我希望能夠檢索具有最大值和最小值的k/v對,類似於TreeMap能夠用鍵執行的操作。我發現Google Guava的TreeMultimap,它是一個Multimap的實現,其鍵和值按其自然排序或由提供的比較器排序。事情是,TreeMultiMap似乎沒有任何方法可以讓我根據鍵或值的順序檢索k/v對(例如,在TreeMap中執行的操作就是pollFirstEntry())。

就這一點而言,我對如何使TreeMultimap對象獲得此功能有點困惑。我覺得它應該工作,也許這只是我如何實例化對象的問題?謝謝,任何幫助,將不勝感激。

回答

2

TreeMultimap不會以您想要的方式支持此操作,我非常確定。

你可以做的是TreeMultimap<Integer, String> - 交換鍵和值的角色 - 然後TreeMultimap.asMap().lastEntry()會讓你一個Map.Entry<Integer, Collection<String>>,對應最大Integer和與之相關的所有String秒。

的一兩件事肯定通過TreeMultimap支持正在以複合值所有鍵作爲一個單一的排序集合。 (你可以把他們看成一個無序收集與values(),當然)。

0

這是真的,TreeMultimap根據值比較器順序值,但順序是唯一相關的關係映射到其他值同樣的鑰匙。因此,舉例來說,如果你有

a => 3 
a => 1 
b => 4 
b => 2 

而且你通過entries()迭代,你應該得到[(a, 1), (a, 3), (b, 2), (b, 4)]。同樣,如果您通過values()進行迭代,您應該獲得[1, 3, 2, 4],因爲它按順序返回a的值,然後依次爲b的值。

獲取第一個或最後關鍵是簡單不過,因爲keySet()返回NavigableSet,這意味着你可以在調用它first()last()