422

Java に double の List があり、ArrayList を降順で並べ替えたいと考えています。

入力 ArrayList は次のとおりです。

List<Double> testList = new ArrayList();

testList.add(0.5);
testList.add(0.2);
testList.add(0.9);
testList.add(0.1);
testList.add(0.1);
testList.add(0.1);
testList.add(0.54);
testList.add(0.71);
testList.add(0.71);
testList.add(0.71);
testList.add(0.92);
testList.add(0.12);
testList.add(0.65);
testList.add(0.34);
testList.add(0.62);

出力は次のようになります

0.92
0.9
0.71
0.71
0.71
0.65
0.62
0.54
0.5
0.34
0.2
0.12
0.1
0.1
0.1
4

21 に答える 21

621
Collections.sort(testList);
Collections.reverse(testList);

それはあなたが望むことをします。ただし、インポートすることを忘れないでくださいCollections

のドキュメントはこちらですCollections

于 2013-04-27T12:50:11.283 に答える
160

降順:

Collections.sort(mArrayList, new Comparator<CustomData>() {
    @Override
    public int compare(CustomData lhs, CustomData rhs) {
        // -1 - less than, 1 - greater than, 0 - equal, all inversed for descending
        return lhs.customInt > rhs.customInt ? -1 : (lhs.customInt < rhs.customInt) ? 1 : 0;
    }
});
于 2016-01-07T01:59:37.953 に答える
96

java.util.Collectionsクラスの util メソッドを使用します。

Collections.sort(list)

実際、カスタムオブジェクトを並べ替えたい場合は、使用できます

Collections.sort(List<T> list, Comparator<? super T> c) 

コレクション API を参照

于 2013-04-27T12:50:58.543 に答える
62

ラムダ (Java8) を使用し、それを最小限の構文に分解すると (この場合、JVM は十分に推論します)、次のようになります。

Collections.sort(testList, (a, b) -> b.compareTo(a));

より詳細なバージョン:

// Implement a reverse-order Comparator by lambda function
Comparator<Double> comp = (Double a, Double b) -> {
    return b.compareTo(a);
};

Collections.sort(testList, comp);

Comparator インターフェイスには実装するメソッドが 1 つしかないため、ラムダの使用が可能です。そのため、VM はどのメソッドが実装されているかを推測できます。params の型は推測できるので、それらを記述する必要はありません (つまり(a, b)、 の代わりに(Double a, Double b). ラムダ本体には 1 行しかなく、メソッドは値を返すことが期待されるため、returnが推測され、中かっこ必要ありません。

于 2016-01-29T02:33:44.163 に答える
31

Java8 では、Comparator を提供する場合にコレクションを並べ替えることができる List インターフェイスにデフォルトの並べ替えメソッドがあります。次のように、質問の例を簡単に並べ替えることができます。

testList.sort((a, b) -> Double.compare(b, a));

注: ラムダの引数は、Double.compare に渡されるときにスワップされ、並べ替えが確実に降順になるようにします。

于 2016-04-04T16:13:24.510 に答える
27

要素が含まれている場合はCollections.sort(list)、並べ替えに使用できます。それ以外の場合は、次のようにそのインターフェイスを実装することをお勧めします。listlistComparable

public class Circle implements Comparable<Circle> {}

compareToもちろん、次のようなメソッドの独自の実現を提供します。

@Override
    public int compareTo(Circle another) {
        if (this.getD()<another.getD()){
            return -1;
        }else{
            return 1;
        }
    }

Colection.sort(list)リストには Comparable 型のオブジェクトが含まれており、並べ替えることができるので、再び使用できます。順序はcompareTo方法によって異なります。詳細については、 https://docs.oracle.com/javase/tutorial/collections/interfaces/order.htmlを確認してください。

于 2015-04-15T14:15:43.220 に答える
11

Collections.sortComparator並べ替えロジックを定義するのインスタンスを渡すことができます。したがって、リストを自然な順序で並べ替えてから逆順に並べ替える代わりに、単純に を渡しCollections.reverseOrder()sort、リストを逆の順序で並べ替えることができます。

// import java.util.Collections;
Collections.sort(testList, Collections.reverseOrder());

@ Marco13が述べたように、より慣用的である(そしておそらくより効率的である)ことは別として、逆順コンパレーターを使用すると、ソートが安定します(つまり、要素がコンパレーターに従って等しい場合、要素の順序は変更されません。逆にすると順序が変わります)

于 2015-05-13T09:15:28.243 に答える
5

次のようにできます。

List<String> yourList = new ArrayList<String>();
Collections.sort(yourList, Collections.reverseOrder());

Collection には、それを支援するデフォルトの Comparator があります。

また、Java 8 の新機能を使用したい場合は、次のようにすることができます。

List<String> yourList = new ArrayList<String>();
yourList = yourList.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList());
于 2016-04-05T12:07:51.500 に答える
5

Java SE 8 を使用している場合は、これが役立つ可能性があります。

//create a comparator object using a Lambda expression
Comparator<Double> compareDouble = (d1, d2) -> d1.compareTo(d2);

//Sort the Collection in this case 'testList' in reverse order
Collections.sort(testList, Collections.reverseOrder(compareDouble));

//print the sorted list using method reference only applicable in SE 8
testList.forEach(System.out::println);
于 2015-05-13T08:57:35.043 に答える
4

あなたはそのように使うことができます

ArrayList<Group> groupList = new ArrayList<>();
Collections.sort(groupList, Collections.reverseOrder());
Collections.reverse(groupList);
于 2015-12-30T05:28:08.037 に答える
3

たとえば、クラス Person: String name, int age ==>Constructor new Person(name,age) があります

import java.util.Collections;
import java.util.ArrayList;
import java.util.Arrays;


public void main(String[] args){
    Person ibrahima=new Person("Timera",40);
    Person toto=new Person("Toto",35);
    Person alex=new Person("Alex",50);
    ArrayList<Person> myList=new ArrayList<Person>
    Collections.sort(myList, new Comparator<Person>() {
        @Override
        public int compare(Person p1, Person p2) {
            // return p1.age+"".compareTo(p2.age+""); //sort by age
            return p1.name.compareTo(p2.name); // if you want to short by name
        }
    });
    System.out.println(myList.toString());
    //[Person [name=Alex, age=50], Person [name=Timera, age=40], Person [name=Toto, age=35]]
    Collections.reverse(myList);
    System.out.println(myList.toString());
    //[Person [name=Toto, age=35], Person [name=Timera, age=40], Person [name=Alex, age=50]]

}
于 2017-12-20T14:04:17.943 に答える
-1
  yearList = arrayListOf()
    for (year in 1950 until 2021) {
        yearList.add(year)
    }

   yearList.reverse()
    val list: ArrayList<String> = arrayListOf()

    for (year in yearList) {
        list.add(year.toString())
    }
于 2020-08-18T13:13:35.027 に答える