Di Jawa, saya punya Set
, dan saya ingin mengubahnya menjadi diurutkan List
. Apakah ada metode dalam java.util.Collections
paket yang akan melakukan ini untuk saya?
Di Jawa, saya punya Set
, dan saya ingin mengubahnya menjadi diurutkan List
. Apakah ada metode dalam java.util.Collections
paket yang akan melakukan ini untuk saya?
Jawaban:
Jawaban yang diberikan oleh OP bukanlah yang terbaik. Itu tidak efisien, karena menciptakan array baru yang baru List
dan tidak perlu. Selain itu, ia memunculkan peringatan "tidak dicentang" karena masalah keamanan jenis di sekitar larik generik.
Sebagai gantinya, gunakan sesuatu seperti ini:
public static
<T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
List<T> list = new ArrayList<T>(c);
java.util.Collections.sort(list);
return list;
}
Berikut ini contoh penggunaan:
Map<Integer, String> map = new HashMap<Integer, String>();
/* Add entries to the map. */
...
/* Now get a sorted list of the *values* in the map. */
Collection<String> unsorted = map.values();
List<String> sorted = Util.asSortedList(unsorted);
Util
Kelasnya adalah yang berisi asSortedList()
metode yang saya tulis. Dengan kata lain, Anda menulis Util
sendiri kelasnya, dan memasukkan kode itu ke dalamnya.
Kumpulan yang diurutkan:
return new TreeSet(setIWantSorted);
atau:
return new ArrayList(new TreeSet(setIWantSorted));
Set
?
new TreeSet
menerima Collection
s, bukan hanya Set
s. Tidak semua orang yang membaca jawaban ini akan menggunakan Set
, meskipun itulah pertanyaan awal yang diajukan.
List myList = new ArrayList(collection);
Collections.sort(myList);
... harus melakukan triknya. Tambahkan rasa dengan Generics jika berlaku.
Comparable
dan menimpanyacompareTo
metode.
Selalu aman untuk menggunakan Comparator atau Comparable interface untuk menyediakan implementasi penyortiran (jika objek bukan kelas String atau Wrapper untuk tipe data primitif). Sebagai contoh untuk implementasi komparator untuk mengurutkan karyawan berdasarkan nama
List<Employees> empList = new LinkedList<Employees>(EmpSet);
class EmployeeComparator implements Comparator<Employee> {
public int compare(Employee e1, Employee e2) {
return e1.getName().compareTo(e2.getName());
}
}
Collections.sort(empList , new EmployeeComparator ());
Pembanding berguna ketika Anda perlu memiliki algoritma pengurutan yang berbeda pada objek yang sama (Katakanlah nama emp, gaji emp, dll). Penyortiran mode tunggal dapat diimplementasikan dengan menggunakan antarmuka Sebanding dalam ke objek yang diperlukan.
Tidak ada metode tunggal untuk melakukan itu. Gunakan ini:
@SuppressWarnings("unchecked")
public static <T extends Comparable> List<T> asSortedList(Collection<T> collection) {
T[] array = collection.toArray(
(T[])new Comparable[collection.size()]);
Arrays.sort(array);
return Arrays.asList(array);
}
TreeSet sortedset = new TreeSet();
sortedset.addAll(originalset);
list.addAll(sortedset);
di mana originalset = set tidak disortir dan daftar = daftar untuk dikembalikan
@ Jeremy Stein Saya ingin menerapkan kode yang sama. Saya juga ingin menyortir set ke daftar, Jadi alih-alih menggunakan Set, saya mengonversi nilai set ke dalam Daftar dan mengurutkan daftar itu dengan salah satu variabelnya. Kode ini membantu saya,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());