2013-07-03 52 views
3

我有這段代碼來拍攝地圖並按鍵排序 然後我倒轉地圖,讓他們的第一大元素。番石榴返回鍵值超過一定的閾值

Ordering<String> valueComparator = 
     Ordering.natural().onResultOf(Functions.forMap(WordMap)) 
         .compound(Ordering.natural()); 

WordMapSorted = ImmutableSortedMap.copyOf(WordMap, 
            Collections.reverseOrder(valueComparator)); 

我想知道兩件事情

  1. 我怎樣才能得到只有用鑰匙高於10的數值?我覺得應該用番石榴進行分類,應該有一種簡單的方法來指定一個截止點(因爲一旦你達到低於閾值的值,你只需要把它放在它之前)

  2. 我怎樣才能得到第一個地圖中有100個條目(仍然以地圖的形式)。我知道我可以獲得一組鍵,並獲得前100個,但我想要前100個地圖項。我知道地圖通常沒有順序,但在這種情況下,它被排序並且不可變,所以它有順序。

回答

4

首先觀察:不需要使用Collections.reverseOrder(valueComparator),當你只需要使用valueComparator.reverse()

1需要一些trickiness:

int index = Collections.binarySearch(WordMapSorted.values().asList(), 11); 
index = (index >= 0) ? index : -index - 1; 
// the elements at and after index have value strictly greater than 10 
return WordMapSorted.keySet().asList().subList(index, WordMapSorted.size()); 

2是可行的,像這樣:

WordMapSorted.headMap(WordMapSorted.keySet().asList().get(100)); 
+0

好點,我不知道,如果扭轉實際做額外的工作。感謝第二個答案,這非常有幫助!我想我可以通過迭代器迭代遍歷地圖,並在達到給定值時停止。 – Lemonio

+1

爲1.添加了一個答案。 –

+0

也對不起,你說的headMap是什麼意思? – Lemonio