ホームページ >Java >&#&チュートリアル >Java でツリーマップを値で並べ替えるにはどうすればよいですか?
値によるツリーマップの並べ替え
概要:
ツリーマップでは、要素が並べ替えられます実装に応じて、キーまたは値の自然な順序に基づいています。ただし、コンパレータを使用すると、エントリの値に基づいて TreeMap を並べ替えることができます。
解決策:
TreeMap を値で直接並べ替えることはできません。 byValue コンパレータで試した構文は正しくありません。
ただし、TreeMap のエントリを含むカスタム SortedSet を作成することで、目的の機能を実現できます。この SortedSet は、entriesSortedByValues() メソッドを使用して作成できます。
static <K,V extends Comparable<? super V>> SortedSet<Map.Entry<K,V>> entriesSortedByValues(Map<K,V> map) { SortedSet<Map.Entry<K,V>> sortedEntries = new TreeSet<>( new Comparator<Map.Entry<K,V>>() { @Override public int compare(Map.Entry<K,V> e1, Map.Entry<K,V> e2) { int res = e1.getValue().compareTo(e2.getValue()); return res != 0 ? res : 1; } } ); sortedEntries.addAll(map.entrySet()); return sortedEntries; }
このメソッドは、値が Comparable である Map を受け取り、エントリの値によって並べ替えられた Map.Entry の SortedSet を返します。
このメソッドを使用するには:
Map<String, Integer> map = new TreeMap<>(); map.put("A", 3); map.put("B", 2); map.put("C", 1); System.out.println(map); // prints "{A=3, B=2, C=1}" SortedSet<Map.Entry<String,Integer>> sortedEntries = entriesSortedByValues(map); System.out.println(sortedEntries); // prints "[C=1, B=2, A=3]"
整数に関する注意等価性:
== を使用して整数値を比較する場合、値の同一性ではなく、参照の同一性がチェックされます。整数値が等しいかどうかを比較するには、equals() メソッドを使用することをお勧めします。
以上がJava でツリーマップを値で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。