TreeMapのコンパレータが必要です。これをTreeMapのコンストラクターで匿名で記述する必要がありますか?他にどのようにコンパレータを書くことができますか。現在、Javaは私のコードが好きではありません(匿名でこれを行うことはできますか?):
SortedMap<String, Double> myMap =
new TreeMap<String, Double>(new Comparator<Entry<String, Double>>()
{
public int compare(Entry<String, Double> o1, Entry<String, Double> o2)
{
return o1.getValue().compareTo(o2.getValue());
}
});
コンパレータは、エントリ全体ではなく、キーのみに使用する必要があります。キーに基づいてエントリをソートします。
次のように変更する必要があります
SortedMap<String, Double> myMap =
new TreeMap<String, Double>(new Comparator<String>()
{
public int compare(String o1, String o2)
{
return o1.compareTo(o2);
}
});
更新
次のようにできます(マップにエントリのリストを作成し、値に基づいてリストを並べ替えますが、マップ自体は並べ替えないことに注意してください)-
List<Map.Entry<String, Double>> entryList = new ArrayList<Map.Entry<String, Double>>(myMap.entrySet());
Collections.sort(entryList, new Comparator<Map.Entry<String, Double>>() {
@Override
public int compare(Entry<String, Double> o1, Entry<String, Double> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
キーと値をスワイプできます。例えば
String[] k = {"Elena", "Thomas", "Hamilton", "Suzie", "Phil"};
int[] v = {341, 273, 278, 329, 445};
TreeMap<Integer,String>a=new TreeMap();
for (int i = 0; i < k.length; i++)
a.put(v[i],k[i]);
System.out.println(a.firstEntry().getValue()+"\t"+a.firstEntry().getKey());
a.remove(a.firstEntry().getKey());
System.out.println(a.firstEntry().getValue()+"\t"+a.firstEntry().getKey());