2015-03-30 69 views
0

我有以下情况,我尝试按键排列地图值。按键顺序第一个值必须是按顺序排列的值。如何按键排序地图值?

import java.util.Comparator; 
import java.util.Map; 

import com.google.common.collect.ImmutableMap; 
import com.google.common.collect.Maps; 
import com.google.common.collect.Ordering; 

public class MyEnumKeySortTest { 


    enum Key{ 
     key1, key2 
    } 

    enum Door{ 
     door1, door2 
    } 


    public static void main(String[] args) { 
     Map<Key, Door> test = ImmutableMap.<Key, Door> of(Key.key1, Door.door1, Key.key2, Door.door2); 

     printValues(test); 
     Comparator<Key> comparator = Ordering.explicit(Key.key1); 
     /* 
     * should print 
     * 
     * door1 
     * door2 
     */ 

     test = Maps.newTreeMap(comparator); 
     printValues(test); 

     Comparator<Key> comparator2 = Ordering.explicit(Key.key2); 
     /* 
     * should print 
     * 
     * door2 
     * door1 
     */ 

     test = Maps.newTreeMap(comparator2); 
     printValues(test); 

    } 


    private static void printValues(Map<Key, Door> test) { 
     System.out.println("=========================================================="); 
     for(Door r : test.values()){ 
      System.out.println(r.name()); 
     } 
    } 

} 
+2

这实际上令你困惑。什么是'Ordering.explicit'用于?你是否真的想按键或值来排序?为什么你从一开始就不使用'ImmutableSortedMap',如果你正在用键排序呢? – 2015-03-30 19:51:50

+0

我想让这个键值成为第一个值。从现有的地图。 – Njax3SmmM2x2a0Zf7Hpd 2015-03-30 19:53:53

+0

_这是键值? ('Ordering.explicit'必须按照你想要的顺序取所有的值,所以'Ordering.explicit(key1,key2)'把key1放在key2之前。) – 2015-03-30 19:55:53

回答

0

Map.Entry到一个列表,并使用排序值比较排序它 -

List list = new ArrayList(map.entrySet()); 
Collections.sort(list, new Comparator() { 

    @Override 
    public int compare(Entry e1, Entry e2) { 
    return e1.getKey().compareTo(e2.getKey()); 
    } 

}); 

SortedMap像一些实施 - TreeMap可以使用。在这种情况下,所有密钥可能必须实现Comparable