2013-03-14 58 views
1

我有一个图是这样的:如何排序映射不是通过键而是值类的字段?

Map<String, TC> mapToSort= new HashMap<String, TC>(); 

值是一个类:

class TC { 

    private int a; 

    public TC(int a) { 
     this.a = a; 

    } 
//getters-setters 
    public int getA() { 
     return a; 
    } 
    public void setA(int a) { 
     this.a = a; 
    }  
} 

我想不是由按键对此映射进行排序(这将是很容易使用TreeMap中),但由TC类中的字段“a”变量。因此具有最高“a”值的元素应位于mapToSort之上。 有没有内置或其他优雅的解决方案来实现这一目标?

+0

如果你不使用钥匙进行排序/搜索,你可能要重新考虑你的数据结构。使用'Set'将很容易解决你的目的。 – 2013-03-14 11:15:59

+0

http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – Aerus 2013-03-14 11:17:25

+0

http://stackoverflow.com/questions/2864840/treemap-sort逐值 – Mikhail 2013-03-14 11:25:18

回答

0

落实类可比,然后把它们放在一个TreeSet

class TC implements Comparable<TC> { 

    private int a; 

    public TC(int a) { 
     this.a = a; 
    } 
//getters-setters 
    public int getA() { 
     return a; 
    } 
    public void setA(int a) { 
     this.a = a; 
    } 

    @Override 
    public int compareTo(TC tc){ 
     return this.a-tc.getA();  
    } 
} 
0

使用一个TreeMap与按键自定义比较。在关键对象中保留一个指向值对象的链接。实现你的比较器,按值进行比较,而不是按键。在你的情况下,你必须用类似的东西包装一个字符串:

class Key{ 
    public Key(String key, TC value) 
    { 
     this.key = key; 
     this.value = value; 
    } 
    String key; 
    TC value; 
} 
0

这样的事情会得到一个值的排序列表。

List sortValues(Map mapToSort) 
{ 
    List values = new ArrayList(mapToSort.values()); 
    Comparator<TC> tcComparator = new Comparator<TC> 
    { 
    public int compare(TC tc1, TC tc2) 
    { 
     return tc1.getA() - tc2.getA(); 
    } 
    }; 
    Collections.sort(values, tcComparator); 
    return values; 
} 
相关问题