2014-02-12 133 views
2

可以說我有具有以下結構的數據。排序地圖的地圖,即在java中的嵌套地圖

//map1  //map2   //map3 
Fruit-------->Apple--------->Green Apple------->4 
          Red Apple--------->5 
          Yellow Apple------>6 
          Total------------->15 
       Cherry-------->Red Cherry-------->5 
          Green Cherry------>3 
          Total------------->8 
Vegetable----->Capsicum----->Green Capsicum---->5 
          Red Capsicum------>7 
          Yellow Capsicum--->3 
          Total------------->15 

換句話說,我有

Map<String, Map<String, Map<String, Long>>> 

我想通過值最裏面的地圖(MAP3)和中間地圖(MAP2)的條目「總」的MAP3值排序。

我知道我們通常可以按照以下方式按照值排序地圖。

import java.util.*; 

public class MapUtil 
{ 
public static <K, V extends Comparable<? super V>> Map<K, V> 
    sortByValue(Map<K, V> map) 
{ 
    List<Map.Entry<K, V>> list = 
     new LinkedList<Map.Entry<K, V>>(map.entrySet()); 
    Collections.sort(list, new Comparator<Map.Entry<K, V>>() 
    { 
     public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) 
     { 
      return (o1.getValue()).compareTo(o2.getValue()); 
     } 
    }); 

    Map<K, V> result = new LinkedHashMap<K, V>(); 
    for (Map.Entry<K, V> entry : list) 
    { 
     result.put(entry.getKey(), entry.getValue()); 
    } 
    return result; 
    } 
} 

但是,這裏的值是一個很長的,而不是地圖。我正在研究這個問題,我認爲這可以是瞭解更多關於地圖的好方法。任何想法或建議如何實現?

+0

你是什麼意思的「排序」,地圖沒有秩序,所以排序沒用 - 或者你想顯示的信息排序? – Smutje

+0

是的,我想顯示信息排序。 –

+0

@NimChimpsky我已經經歷過這個問題。它沒有幫助。 –

回答

0

如果我是你,我會用一棵樹來代替。可視化一個樹節點而不是映射地圖的地圖更方便。如果你想要另一個級別呢?又一張地圖?它不能很好地擴展。

此外,您有很多遍歷樹的選項,因此您的需求將很容易實現。