Mengisih Peta Pokok mengikut Nilai
Pengenalan:
Dalam TreeMap, elemen diisih berdasarkan susunan semula jadi mereka, yang boleh menjadi kunci atau nilai, bergantung pada pelaksanaan. Walau bagaimanapun, adalah mungkin untuk mengisih TreeMap berdasarkan nilai entrinya menggunakan pembanding.
Penyelesaian:
Anda tidak boleh mengisih TreeMap secara langsung mengikut nilainya. Sintaks yang anda cuba dengan pembanding byValue adalah tidak betul.
Walau bagaimanapun, anda boleh mencapai kefungsian yang diingini dengan mencipta SortedSet tersuai yang mengandungi entri TreeMap. SortedSet ini boleh dibuat menggunakan kaedah entriSortedByValues():
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; }
Kaedah ini mengambil Peta yang nilainya Sebanding dan mengembalikan Set Sorted Map.Entry yang diisih mengikut nilai entri.
Untuk menggunakan ini kaedah:
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]"
Nota tentang Kesamaan Integer:
Apabila membandingkan nilai Integer menggunakan ==, ia menyemak kesamaan rujukan, bukan kesamaan nilai. Adalah disyorkan untuk menggunakan kaedah equals() untuk membandingkan nilai Integer untuk kesamaan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengisih Peta Pokok mengikut Nilainya di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!