Có cách nào dễ dàng để sắp xếp một mảng theo thứ tự giảm dần như cách chúng có sắp xếp theo thứ tự tăng dần trong Arrays class không?Java Array Sắp xếp giảm dần?
Hoặc tôi phải dừng lại lười biếng và tự làm điều này: [
Có cách nào dễ dàng để sắp xếp một mảng theo thứ tự giảm dần như cách chúng có sắp xếp theo thứ tự tăng dần trong Arrays class không?Java Array Sắp xếp giảm dần?
Hoặc tôi phải dừng lại lười biếng và tự làm điều này: [
Bạn có thể sử dụng này
sort(T[] a, Comparator<? super T> c)
Arrays.sort(a, Collections.reverseOrder());
Bạn có thể sử dụng này:
Arrays.sort(data, Collections.reverseOrder());
Collections.reverseOrder()
trả về một Comparator
sử dụng thứ tự nghịch đảo ngược. Bạn có thể nhận phiên bản ngược của bộ so sánh của riêng bạn bằng cách sử dụng Collections.reverseOrder(myComparator)
.
cho một danh sách
Collections.sort(list ,Collections.reverseOrder());
cho một mảng
Arrays.sort(array, Collections.reverseOrder());
int [] array = {2,4,3,6,8,7}; Arrays.sort (mảng, Collections.reverseOrder()); đang cho tôi một lỗi! Lỗi là: "Phương thức sắp xếp (int []) trong loại Mảng không áp dụng cho đối số (int [], Comparator
int không phải là đối tượng. Hãy thử sử dụng Integer [] để thay thế. – Ornithopter
Tại sao Integer [] hoạt động và không int []? – OpMt
Đối với mảng chứa các yếu tố của nguyên thủy nếu có org.apache.commons.lang(3)
theo ý cách dễ dàng để đảo ngược mảng (sau khi phân loại nó) là sử dụng :
ArrayUtils.reverse(array);
Tôi không biết trường hợp sử dụng của bạn là gì, tuy nhiên ngoài o có câu trả lời ở đây khác (lười) tùy chọn là vẫn sắp xếp theo thứ tự tăng dần như bạn chỉ ra nhưng sau đó iterate trong đảo ngược để thay thế.
một sự thay thế có thể là (đối với số !!!)
Nghĩa đen nói:
array = -Arrays.sort(-array)
' {__________ lol ________} ' –
Phương pháp này thực sự sáng tạo nếu chúng ta sắp xếp số, mặc dù nó không phải là chung và có thể gây ra vấn đề cho tràn ... – hackjutsu
Đây là câu trả lời rất tốt cho các kiểu nguyên thủy . Bạn là thiên tài. –
không có so sánh rõ ràng r:
Collections.sort(list, Collections.reverseOrder());
với so sánh rõ ràng:
Collections.sort(list, Collections.reverseOrder(new Comparator()));
Java 8:
Arrays.sort(list, comparator.reversed());
Cập nhật: reversed()
đảo ngược so sánh cụ thể. Thông thường, các bộ so sánh thứ tự tăng dần, do đó, điều này thay đổi thứ tự giảm dần.
Trước tiên, bạn cần phải sắp xếp mảng bằng cách sử dụng:
Collections.sort(Myarray);
Sau đó, bạn cần phải đảo ngược thứ tự từ tăng dần thành giảm dần sử dụng:
Collections.reverse(Myarray);
Một giải pháp là nếu bạn sử dụng giao diện So sánh, bạn có thể chuyển các giá trị đầu ra mà bạn đã chỉ định trong compareTo của bạn (Object bCompared).
Ví dụ:
public int compareTo(freq arg0)
{
int ret=0;
if(this.magnitude>arg0.magnitude)
ret= 1;
else if (this.magnitude==arg0.magnitude)
ret= 0;
else if (this.magnitude<arg0.magnitude)
ret= -1;
return ret;
}
đâu độ richter là một thuộc tính với datatype đôi trong chương trình của tôi. Điều này đã được phân loại lớp học được xác định của tôi freq theo thứ tự ngược lại bởi độ lớn của nó. Vì vậy, để sửa điều đó, bạn chuyển đổi các giá trị được trả về bởi <
và >
. Điều này giúp bạn như sau:
public int compareTo(freq arg0)
{
int ret=0;
if(this.magnitude>arg0.magnitude)
ret= -1;
else if (this.magnitude==arg0.magnitude)
ret= 0;
else if (this.magnitude<arg0.magnitude)
ret= 1;
return ret;
}
Để tận dụng compareTo này, chúng tôi chỉ cần gọi Arrays.sort(mFreq)
mà sẽ cung cấp cho bạn các mảng được sắp xếp freq [] mFreq
.
Vẻ đẹp (theo ý kiến của tôi) về giải pháp này là nó có thể được sử dụng để sắp xếp các lớp do người dùng xác định và thậm chí nhiều hơn sắp xếp chúng theo thuộc tính cụ thể. Nếu thực hiện một giao diện Comparable âm thanh khó khăn với bạn, tôi khuyến khích bạn không nghĩ theo cách đó, nó thực sự là không. Điều này link on how to implement comparable làm mọi thứ dễ dàng hơn cho tôi. Hy vọng mọi người có thể tận dụng giải pháp này và niềm vui của bạn thậm chí sẽ là so sánh được với tôi.
array.sort(function(a, b) {return b - a;}); //descending
hoặc
array.sort(function(a, b) {return a - b;}); //ascending
Tôi biết rằng đây là một chủ đề khá cũ, nhưng đây là một phiên bản cập nhật cho số nguyên và Java 8:
Arrays.sort(array, (o1, o2) -> o2 - o1);
Lưu ý rằng nó là "o1 - o2 "cho thứ tự tăng dần bình thường (hoặc Comparator.comparingInt()).
Điều này cũng phù hợp với mọi loại đối tượng khác. Nói:
Arrays.sort(array, (o1, o2) -> o2.getValue() - o1.getValue());
Nó không thể sắp xếp các mảng nguyên thủy –
Chuyển đổi nguyên thủy của bạn thành các đối tượng tương ứng. Số nguyên cho int, Double cho double, Boolean cho boolean, v.v. – Ishmael
nếu bạn vẫn muốn sử dụng [comparator] tùy chỉnh của bạn (http://docs.oracle.com/javase/7/docs/api/java/util/Comparator .html): 'Collections.reverseOrder (this)' –