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 的顶部。是否有任何内置或其他优雅的解决方案来实现这一目标?

4

3 回答 3

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;
}
于 2013-03-14T11:28:16.567 回答
0

使用带有自定义比较器的 TreeMap 作为键。在关键对象中保持到值对象的链接。实现您的比较器以按值进行比较,而不是按键进行比较。在您的情况下,您必须使用以下内容包装一个字符串:

class Key{
   public Key(String key, TC value)
   {
      this.key = key;
      this.value = value;
   }
   String key;
   TC value;
}
于 2013-03-14T11:21:56.250 回答
0

由您的类实现 Comparable ,然后将它们放入 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();     
    } 
}
于 2013-03-14T11:18:55.813 回答