重複の可能性:
Javaの値でMap <Key、Value>をソートする方法は?
私は持っていtreemap<Integer,Float>
ます。浮動小数点数でマップを並べ替えるにはどうすればよいですか?
手っ取り早い方法はありますか?または、マップのコンパレータを作成する必要がありますか?
重複の可能性:
Javaの値でMap <Key、Value>をソートする方法は?
私は持っていtreemap<Integer,Float>
ます。浮動小数点数でマップを並べ替えるにはどうすればよいですか?
手っ取り早い方法はありますか?または、マップのコンパレータを作成する必要がありますか?
Map
実際には、実装を値で (正確に、確実に) ソートすることはできません。(そうでないと主張する実装は、ハック的で、信頼性が低く、非常に奇妙な動作をすることがあります。重複した値を拒否し、マップにないキーを見ようとすると例外をスローし、バッキング マップが変更されると回復不能なほど破損します...)
代わりに、エントリのリストを明示的に並べ替えます。
List<Map.Entry<Integer, Float>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Float>>() {
public int compare(Map.Entry<Integer, Float> e1, Map.Entry<Integer, Float> e2){
return e1.getValue().compareTo(e2.getValue());
}
});
必要に応じて、これを に入れることができますLinkedHashMap
:
Map<Integer, Float> sortedMap = new LinkedHashMap<Integer, Float>();
for (Map.Entry<Integer, Float> entry : list) {
sortedMap.put(entry.getKey(), entry.getValue());
}
最も簡単な解決策は、代わりにLinkedHashMapを使用し、値で並べ替えることです。これを参照してください: LinkedHashMapをその値クラスのフィールドでソートする方法は?