2014-02-12 39 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

如果我是你,我会用一棵树来代替。可视化一个树节点而不是映射地图的地图更方便。如果你想要另一个级别呢?又一张地图?它不能很好地扩展。

此外,您有很多遍历树的选项,因此您的需求将很容易实现。