2013-03-19 84 views
1

的數組,如果我做一個地圖這樣的地圖:那種包含對象

Map<Object, ArrayList<Object>> multiMap = new HashMap<Object, ArrayList<Object>>(); 

是有我排序的值在ArrayList<Object>?

我想的只是一種方法通過多重映射循環爲這樣:

for (Entry<Object, ArrayList<Object>> entry : multiMap.entrySet()) { 
    for (int i = 0; i < entry.size(); i++) { 
      //retrieve all array items and place in new array to sort 
    } 

所以我們有 對象--->的ArrayList(包含2種元素) 對象--->的ArrayList(CONTA插件2組的元素) 對象--->的ArrayList(包含2種元素) 對象--->的ArrayList(包含2種元素)

我想在所有上述和排序的那些的ArrayList的所有元素。它並不需要留在多重映射..我只是想看看是否有更好的方式來做到這一點..

編輯: 這裏的關鍵是要在每次所有的數組元素進行排序arrayList反對所有其他arrayList中的其他數組元素...所以它不像調用排序 那麼簡單,但我想知道是否有更好/更清潔的方式來做到這一點?我不是那麼熟悉地圖...任何幫助將不勝感激..

+2

'Collections.sort()' - 試試看。 – SudoRahul 2013-03-19 14:08:10

+0

@RJ但我想排序所有arrayLists對所有數組中的每個值對所有其他arrayLists中的每個其他值...所以它不是那麼簡單.. – BigBug 2013-03-19 14:10:26

+0

@BlueMonster:它不是很清楚你想要什麼。你能提供一些樣本數據以及如何分類嗎? (另外:這個數據結構暗示可能的[object denial](http://stackoverflow.com/a/372​​5728/40342))。 – 2013-03-19 14:11:24

回答

1

根據您的編輯,您似乎想要獲取地圖中的所有對象並對它們進行排序。沒有一種方法可以將地圖中的值排序在一起,以便對所有項進行排序,最簡單的方法是將它們合併到一個列表中,並將Collections.sort()整合到一起。

public ArrayList<Object> sortAllValues() { 
    ArrayList<Object> allEntries = new ArrayList<Object>(); 
    for (Entry<Object, ArrayList<Object>> entry : multiMap.entrySet()) 
     allEntries.addAll(entry.getValue()); 
    } 
return Collections.sort(allEntries); 
} 

如果你的對象沒有它,你仍然需要實現Comparable。這是一個很好的指導如何做Comparable

+0

完美,謝謝百萬 – BigBug 2013-03-19 14:38:55

0

其實你不應該在意ArrayList是一個Map中的值這並不重要。您只需按照您對這些列表進行排序的方式來排序此ArrayList<Object>。這裏的問題是你將不得不實現某種比較器來將對象轉換爲所需的類型。一般來說,我會親自制作比Object更具體類型的ArrayList,以使排序更容易。

0

查看Apache Commons和Google Collections的MultiMap實現。他們可能有一個已經支持排序/排序。