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

クラスで 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 に答える
0

キーのカスタム Comparator で 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

このようなものは、値のソートされたリストを取得します。

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 に答える