如何按键而不是值类的字段对地图进行排序?

时间:2013-03-14 11:09:45

标签: java sorting map

我有这样的地图:

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

3 个答案:

答案 0 :(得分: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();     
    } 
}

答案 1 :(得分:0)

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

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

答案 2 :(得分: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;
}