Câu trả lời:
Đây là một cách cho bạn list
:
list.sort(null);
Collections.reverse(list);
Hoặc bạn có thể triển khai của riêng bạn Comparator
để sắp xếp và loại bỏ bước ngược lại:
list.sort((o1, o2) -> o2.compareTo(o1));
Hoặc thậm chí sử dụng đơn giản hơn Collections.reverseOrder()
vì bạn chỉ đang đảo ngược:
list.sort(Collections.reverseOrder());
o2.compareTo(o1)
ở đây :)
list.sort((o1, o2) -> o2.compareTo(o1))
Comparator<Long> comparator = Collections.reverseOrder();
Collections.sort(arrayList, comparator);
Bạn có thể sử dụng mã sau được cung cấp bên dưới;
Collections.sort(list, Collections.reverseOrder());
hoặc nếu bạn định sử dụng bộ so sánh tùy chỉnh, bạn có thể sử dụng như nó được đưa ra bên dưới
Collections.sort(list, Collections.reverseOrder(new CustomComparator());
Trong đó CustomComparator là một lớp so sánh so sánh đối tượng có trong danh sách.
làm tốt điều này trong java 8 thật thú vị và dễ dàng hơn
Collections.sort(variants,(a,b)->a.compareTo(b));
Collections.reverse(variants);
Lambda biểu thức rock đây !!!
trong trường hợp bạn cần một logic nhiều hơn một dòng để so sánh a và b, bạn có thể viết nó như thế này
Collections.sort(variants,(a,b)->{
int result = a.compareTo(b);
return result;
});
Sắp xếp bình thường và sử dụng Collections.reverse();
Đối với lamdas trong đó giá trị dài của bạn nằm ở đâu đó trong một đối tượng, tôi khuyên bạn nên sử dụng:
.sorted((o1, o2) -> Long.compare(o1.getLong(), o2.getLong()))
hoặc thậm chí tốt hơn:
.sorted(Comparator.comparingLong(MyObject::getLong))
Sắp xếp, sau đó đảo ngược.
Một cách tiếp cận tổng quát hơn để triển khai Bộ so sánh của riêng chúng tôi như bên dưới
Collections.sort(lst,new Comparator<Long>(){
public int compare(Long o1, Long o2) {
return o2.compareTo(o1);
}
});
Bằng cách sử dụng Collections.sort()
với một bộ so sánh cung cấp thứ tự giảm dần. Xem Javadoc cho Collections.sort .
Cách tiếp cận sau đây sẽ sắp xếp danh sách theo thứ tự giảm dần và cũng xử lý các giá trị ' null ', đề phòng trường hợp bạn có bất kỳ giá trị null nào thì Collections.sort () sẽ ném NullPointerException
Collections.sort(list, new Comparator<Long>() {
public int compare(Long o1, Long o2) {
return o1==null?Integer.MAX_VALUE:o2==null?Integer.MIN_VALUE:o2.compareTo(o1);
}
});
Bạn cũng có thể sắp xếp một ArrayList
với một TreeSet
thay vì a comparator
. Đây là một ví dụ từ một câu hỏi tôi đã có trước đây cho một mảng số nguyên. Tôi đang sử dụng "số" làm tên trình giữ chỗ cho ArrayList
.
import.java.util.*;
class MyClass{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
ArrayList<Integer> numbers = new ArrayList<Integer>();
TreeSet<Integer> ts = new TreeSet<Integer>(numbers);
numbers = new ArrayList<Integer>(ts);
System.out.println("\nThe numbers in ascending order are:");
for(int i=0; i<numbers.size(); i++)
System.out.print(numbers.get(i).intValue()+" ");
System.out.println("\nThe numbers in descending order are:");
for(int i=numbers.size()-1; i>=0; i--)
System.out.print(numbers.get(i).intValue()+" ");
}
}
Vì vậy, có một điều tôi muốn đưa ra mà tôi nghĩ là quan trọng và tôi nghĩ rằng bạn nên xem xét. thời gian chạy và bộ nhớ. Giả sử bạn có một danh sách và muốn sắp xếp nó, bạn có thể, có một danh sách được xây dựng sẵn hoặc bạn có thể phát triển danh sách của riêng mình. Sau đó, bạn nói, muốn đảo ngược danh sách. Đó là câu trả lời được liệt kê ở trên.
Tuy nhiên, nếu bạn đang tạo danh sách đó, có thể tốt nếu sử dụng một cấu trúc dữ liệu khác để lưu trữ nó và sau đó chỉ cần kết xuất nó vào một mảng.
Hàng đống chỉ làm điều này. Bạn lọc dữ liệu và nó sẽ xử lý mọi thứ, sau đó bạn có thể tách mọi thứ ra khỏi đối tượng và nó sẽ được sắp xếp.
Một lựa chọn khác là hiểu cách hoạt động của bản đồ. Rất nhiều lần, Bản đồ hoặc HashMap như một thứ được gọi là một thứ gì đó được gọi, có một khái niệm cơ bản đằng sau nó.
Ví dụ .... bạn cung cấp một loạt các cặp khóa-giá trị trong đó khóa là dài và khi bạn thêm tất cả các phần tử, bạn có thể thực hiện: .keys
và nó sẽ tự động trả lại cho bạn một danh sách đã được sắp xếp.
Nó phụ thuộc vào cách bạn xử lý dữ liệu trước đó như cách tôi nghĩ bạn nên tiếp tục với việc sắp xếp và đảo ngược tiếp theo
l1 > l2 ? -1 : l1 == l2 ? 0 : 1
mã này là vô lý. Sử dụngo1.compareTo(o2)
sau đó.