Arraysクラスで昇順でソートする方法のように、配列を降順でソートする簡単な方法はありますか?
それとも怠惰になるのをやめて、これを自分でやらなければなりませんか。
これを使ってあらゆる種類のオブジェクトをソートすることができます
sort(T[] a, Comparator<? super T> c)
Arrays.sort(a, Collections.reverseOrder());
Arrays.sort()
を直接使用してプリミティブ配列を降順にソートすることはできません。 Arrays.sort()
で定義されたリバースコンパレータを渡してCollection.reverseOrder()
メソッドを呼び出そうとすると、エラーが発生します。
sortに適したメソッドが見つかりません(int []、コンパレータ)
Integer配列ではうまくいきますが、int配列ではうまくいきません。
プリミティブ配列を降順に並べ替える唯一の方法は、まず配列を昇順に並べ替えてから、配列を元に戻すことです。これは、2次元プリミティブ配列にも当てはまります。
これを使うことができます:
Arrays.sort(data, Collections.reverseOrder());
Collections.reverseOrder()
は、逆の自然順を使ってComparator
を返します。 Collections.reverseOrder(myComparator)
を使ってあなた自身のコンパレータの反転バージョンを得ることができます。
リスト用
Collections.sort(list, Collections.reverseOrder());
配列の場合
Arrays.sort(array, Collections.reverseOrder());
別の方法があります(数字の場合は!!!)
文字通り話されている:
array = -Arrays.sort(-array)
明示的な比較なし
Collections.sort(list, Collections.reverseOrder());
明示的な比較子を使う:
Collections.sort(list, Collections.reverseOrder(new Comparator()));
Java 8:
Arrays.sort(list, comparator.reversed());
更新:reversed()
は指定されたコンパレータを反転します。通常、比較子は昇順に並ぶので、これは降順に並び替えます。
私はあなたのユースケースが何であったかわかりません、しかしここで他の答えに加えてもう一つの(怠惰な)オプションはあなたが示すようにまだ昇順にソートすることですそしてそれから逆に繰り返すこと代わりに注文してください。
まず、配列を並べ替える必要があります。
Collections.sort(Myarray);
それからあなたは昇順から降順に順番を逆にする必要があります:
Collections.reverse(Myarray);
org.Apache.commons.lang(3)
が処分されている場合にプリミティブの要素を含む配列の場合(配列をソートした後で)配列を逆にする簡単な方法は以下を使うことです。
ArrayUtils.reverse(array);
別の解決策は、Comparableインターフェイスを使用している場合、指定した出力値を切り替えることができるということです。 compareTo(Object bCompared)。
例えば :
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;
}
ここで、magnitudeは、私のプログラムではdoubleデータ型の属性です。これは、定義したクラスfreqを大きさで逆順に並べ替えていました。したがって、それを修正するには、<
と>
によって返される値を切り替えます。これにより、次のことができます。
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;
}
このcompareToを利用するには、Arrays.sort(mFreq)
を呼び出すだけで、ソートされた配列freq [] mFreq
が提供されます。
(私の意見では)このソリューションの美しさは、ユーザー定義のクラスをソートするために使用できることです。さらに、特定の属性でクラスをソートすることもできます。 Comparableインターフェースの実装が気に障る場合は、そのように考えないことをお勧めしますが、実際はそうではありません。この 同等の実装方法に関するリンク により、作業がずっと簡単になりました。人がこの解決策を利用できることを望み、あなたの喜びが比較可能になることさえあります。
array.sort(function(a, b) {return b - a;}); //descending
または
array.sort(function(a, b) {return a - b;}); //ascending
public double[] sortArrayAlgorithm(double[] array) { //sort in descending order
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (array[i] >= array[j]) {
double x = array[i];
array[i] = array[j];
array[j] = x;
}
}
}
return array;
}
このメソッドを使用してdouble型の配列を降順にソートするだけです。「戻り型」、「引数型」、および対応する型に対する変数 "x"型。 if条件で "> ="を "<="に変更して、順序を昇順にすることもできます。
あなたは stream オペレーション( Collections.stream() )を Comparator.reverseOrder() 。
たとえば、このコレクションがあるとします。
List<String> items = new ArrayList<>();
items.add("item01");
items.add("item02");
items.add("item03");
items.add("item04");
items.add("item04");
項目を「自然な」順序で印刷するには、 sorted() メソッドを使用します(または省略しても同じ結果になります)。
items.stream()
.sorted()
.forEach(item -> System.out.println(item));
あるいは、降順(逆順)に印刷するには、Comparatorを使用して順序を逆にする sorted メソッドを使用できます。
items.stream()
.sorted(Comparator.reverseOrder())
.forEach(item -> System.out.println(item));
これにはコレクションがComparableを実装している必要があることに注意してください(Integer、Stringなど)。
これは私のために働いた:
package doublearraysort;
import Java.util.Arrays;
import Java.util.Collections;
public class Gpa {
public static void main(String[] args) {
// initializing unsorted double array
Double[] dArr = new Double[] {
new Double(3.2),
new Double(1.2),
new Double(4.7),
new Double(3.3),
new Double(4.6),
};
// print all the elements available in list
for (double number : dArr) {
System.out.println("GPA = " + number);
}
// sorting the array
Arrays.sort(dArr, Collections.reverseOrder());
// print all the elements available in list again
System.out.println("The sorted GPA Scores are:");
for (double number : dArr) {
System.out.println("GPA = " + number);
}
}
}
出力:
GPA = 3.2
GPA = 1.2
GPA = 4.7
GPA = 3.3
GPA = 4.6
The sorted GPA Scores are:
GPA = 4.7
GPA = 4.6
GPA = 3.3
GPA = 3.2
GPA = 1.2
私はこれがかなり古いスレッドであることを知っています、しかしここにIntegersとJava 8のための更新版があります:
Arrays.sort(array, (o1, o2) -> o2 - o1);
通常の昇順(またはComparator.comparingInt())の場合は「o1 - o2」です。
これは他の種類のオブジェクトに対しても機能します。いう:
Arrays.sort(array, (o1, o2) -> o2.getValue() - o1.getValue());
Arrays.sort()
およびCollections.reverseOrder()
を使用してプリミティブの配列(つまり、int[] arr = {1, 2, 3};
)を逆ソートすることは直接可能ではありません。これらのメソッドは、プリミティブ型(Integer
)ではなく参照型(int
)を必要とするためです。
ただし、Java 8 Streamを使用して、配列を最初にボックス化して逆順で並べ替えることができます。
// an array of ints
int[] arr = {1, 2, 3, 4, 5, 6};
// an array of reverse sorted ints
int[] arrDesc = Arrays.stream(arr).boxed()
.sorted(Collections.reverseOrder())
.mapToInt(Integer::intValue)
.toArray();
System.out.println(Arrays.toString(arrDesc)); // outputs [6, 5, 4, 3, 2, 1]