回答:
ここにあなたのための1つの方法がありますlist
:
list.sort(null);
Collections.reverse(list);
または、独自のものComparator
を実装して、逆のステップをソートして排除することもできます。
list.sort((o1, o2) -> o2.compareTo(o1));
または、単にCollections.reverseOrder()
反転するだけなので、さらに単純に使用します。
list.sort(Collections.reverseOrder());
o2.compareTo(o1)
ここにある必要があります:)
list.sort((o1, o2) -> o2.compareTo(o1))
Comparator<Long> comparator = Collections.reverseOrder();
Collections.sort(arrayList, comparator);
以下のコードを使用できます。
Collections.sort(list, Collections.reverseOrder());
または、カスタムコンパレータを使用する場合は、以下に示すように使用できます。
Collections.sort(list, Collections.reverseOrder(new CustomComparator());
ここで、CustomComparatorは、リストに存在するオブジェクトを比較するコンパレータクラスです。
これをJava 8でうまくやることはとても楽しく簡単です
Collections.sort(variants,(a,b)->a.compareTo(b));
Collections.reverse(variants);
ラムダ式はここで揺れる!!!
aとbを比較するために複数のラインロジックが必要な場合は、次のように書くことができます
Collections.sort(variants,(a,b)->{
int result = a.compareTo(b);
return result;
});
普通に並べ替えて使う Collections.reverse();
並べ替えてから逆にします。
以下のように独自のコンパレータを実装するためのより一般的なアプローチ
Collections.sort(lst,new Comparator<Long>(){
public int compare(Long o1, Long o2) {
return o2.compareTo(o1);
}
});
Collections.sort()
降順を提供するコンパレータと組み合わせて使用します。Collections.sortの Javadocを参照してください。
ArrayList
をのTreeSet
代わりにでソートすることもできますcomparator
。これは、整数配列について以前に私が持っていた質問の例です。「数字」をのプレースホルダー名として使用してい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()+" ");
}
}
だから、私が大切にしたいと思っていることを考えてみてください。ランタイムとメモリ。リストがあり、それを並べ替えたいとしましょう。できれば、組み込みの並べ替えがあるか、独自に並べ替えることができます。次に、リストを元に戻します。それが上記の答えです。
ただし、そのリストを作成している場合は、別のデータ構造を使用してリストを格納し、それを配列にダンプすることをお勧めします。
ヒープはまさにこれを行います。データをフィルターにかけると、すべてが処理され、オブジェクトからすべてをポップして並べ替えることができます。
別のオプションは、マップがどのように機能するかを理解することです。多くの場合、何かが呼ばれるMapまたはHashMapには、その背後にある基本的な概念があります。
たとえば...キーが長いKey-Valueペアの束をフィードし、すべての要素を追加すると、次のことができ .keys
ます。そうすると、自動的にソートされたリストに戻ります。
それはあなたがソートとその後の逆を続行する必要があると私が考える方法に関してデータをどのように処理するかに依存します
l1 > l2 ? -1 : l1 == l2 ? 0 : 1
このコードはばかげています。o1.compareTo(o2)
次に使用します。