Trong Java, tôi có một Set
và tôi muốn biến nó thành một sắp xếp List
. Có một phương pháp trong java.util.Collections
gói sẽ làm điều này cho tôi?
Trong Java, tôi có một Set
và tôi muốn biến nó thành một sắp xếp List
. Có một phương pháp trong java.util.Collections
gói sẽ làm điều này cho tôi?
Câu trả lời:
Câu trả lời được cung cấp bởi OP không phải là tốt nhất. Nó không hiệu quả, vì nó tạo ra một mảng mới List
và không cần thiết. Ngoài ra, nó đưa ra các cảnh báo "không được kiểm soát" vì các vấn đề an toàn kiểu xung quanh các mảng chung.
Thay vào đó, sử dụng một cái gì đó như thế này:
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;
}
Đây là một ví dụ sử dụng:
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
Lớp là lớp chứa asSortedList()
phương thức tôi đã viết. Nói cách khác, bạn tự viết Util
lớp và đặt mã đó vào đó.
Bộ sắp xếp:
return new TreeSet(setIWantSorted);
hoặc là:
return new ArrayList(new TreeSet(setIWantSorted));
Set
?
new TreeSet
chấp nhận Collection
s, không chỉ Set
s. Không phải ai đang đọc câu trả lời này cũng sẽ sử dụng Set
, mặc dù đó là câu hỏi ban đầu.
List myList = new ArrayList(collection);
Collections.sort(myList);
Tuy nhiên, nên thực hiện các mẹo nhỏ. Thêm hương vị với Generics khi áp dụng.
Comparable
và ghi đè compareTo
phương thức.
Luôn an toàn khi sử dụng giao diện So sánh hoặc So sánh để cung cấp triển khai sắp xếp (nếu đối tượng không phải là lớp Chuỗi hoặc Trình bao bọc cho các kiểu dữ liệu nguyên thủy). Như một ví dụ cho việc triển khai so sánh để sắp xếp nhân viên dựa trên tên
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 ());
Bộ so sánh rất hữu ích khi bạn cần có thuật toán sắp xếp khác nhau trên cùng một đối tượng (Nói tên emp, lương emp, v.v.). Sắp xếp chế độ đơn có thể được thực hiện bằng cách sử dụng giao diện so sánh trong đối tượng được yêu cầu.
Không có phương pháp duy nhất để làm điều đó. Dùng cái này:
@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);
where originalset = unsort set and list = danh sách được trả về
@Jeremy Stein Tôi muốn thực hiện cùng một mã. Tôi cũng muốn sắp xếp tập hợp thành danh sách, vì vậy thay vì sử dụng Tập tôi đã chuyển đổi các giá trị tập hợp thành Danh sách và sắp xếp danh sách đó theo một biến. Mã này đã giúp tôi,
set.stream().sorted(Comparator.comparing(ModelClassName::sortingVariableName)).collect(Collectors.toList());