Cara semacam ArrayList?

Saya memiliki Daftar ganda di pulau jawa dan saya ingin mengurutkan ArrayList dalam urutan.

Masukan ArrayList adalah sebagai berikut:

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);

Out put harus seperti ini

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
Larutan
Collections.sort(testList);
Collections.reverse(testList);

Yang akan melakukan apa yang anda inginkan. Ingat untuk mengimpor Koleksi meskipun!

Berikut ini merupakan dokumentasi untukCollections.

Komentar (10)

Menurun:

Collections.sort(mArrayList, new Comparator() {
    @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;
    }
});
Komentar (3)

Gunakan util metode jawa.util.Koleksi kelas, aku.e

Collections.sort(list)

Pada kenyataannya, jika anda ingin mengurutkan objek kustom, anda dapat menggunakan

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

melihat api koleksi

Komentar (0)

Untuk contoh, ini akan melakukan keajaiban di pulau Jawa 8

List testList = new ArrayList();
testList.sort(Comparator.naturalOrder());

Tapi jika anda ingin mengurutkan berdasarkan beberapa bidang dari objek yang anda menyortir, anda dapat melakukannya dengan mudah dengan:

testList.sort(Comparator.comparing(ClassName::getFieldName));

atau

 testList.sort(Comparator.comparing(ClassName::getFieldName).reversed());

atau

 testList.stream().sorted(Comparator.comparing(ClassName::getFieldName).reversed()).collect(Collectors.toList());

Sumber: https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html

Komentar (11)

Menggunakan lambdas (Java8), dan stripping itu ke paling sederhana dari sintaks (JVM akan menyimpulkan banyak ** dalam kasus ini), anda mendapatkan:

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

Lebih verbose versi:

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

Collections.sort(testList, comp);

Penggunaan lambda adalah mungkin karena antarmuka Komparator hanya memiliki satu metode untuk melaksanakan, jadi VM dapat menyimpulkan metode yang menerapkan. Karena jenis params dapat disimpulkan, mereka don't harus menyatakan (yaitu (a, b) bukannya (Double a, Double b). Dan sejak lambda tubuh hanya memiliki satu baris, dan metode ini diharapkan dapat mengembalikan nilai, kembali maksud dan kawat gigi aren't perlu.

Komentar (2)

Dengan Java8 ada default sort metode pada Daftar interface yang akan memungkinkan anda untuk menyortir koleksi jika anda memberikan sebuah Komparator. Anda dapat dengan mudah mengurutkan contoh dalam pertanyaan sebagai berikut:

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

Catatan: args di lambda yang tertukar ketika berlalu di Ganda.bandingkan untuk memastikan semacam ini turun

Komentar (1)

Anda dapat menggunakan Koleksi.mengurutkan(daftar) memilah daftar jika list berisi Sebanding elemen. Jika tidak, saya akan merekomendasikan anda untuk menerapkan bahwa antarmuka seperti berikut:

public class Circle implements Comparable {}

dan tentu saja memberikan anda sendiri realisasi compareTo metode seperti berikut ini:


@Override
    public int compareTo(Circle another) {
        if (this.getD()
Komentar (0)

Koleksi.semacam memungkinkan anda untuk melewati sebuah contoh dari Pembanding yang mendefinisikan logika pengurutan. Jadi bukan menyortir daftar di alam dan kemudian membalikkan itu, satu hanya dapat lulus Koleksi.reverseOrder() untuk sort untuk mengurutkan daftar dalam urutan terbalik:

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

Seperti yang disebutkan oleh @Marco13, selain menjadi lebih idiomatik (dan mungkin lebih efisien), menggunakan urutan terbalik pembanding memastikan bahwa semacam stabil (yang berarti bahwa urutan unsur-unsur yang tidak akan berubah ketika mereka sama menurut pembanding, sedangkan membalikkan akan mengubah urutan)

Komentar (0)
//Here is sorted List alphabetically with syncronized

package com.mnas.technology.automation.utility;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;

/**
 * @author manoj.kumar
 */
public class SynchronizedArrayList {
    static Logger log = Logger.getLogger(SynchronizedArrayList.class.getName());

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {

        List synchronizedList = Collections.synchronizedList(new ArrayList());
        synchronizedList.add(new Employee("Aditya"));
        synchronizedList.add(new Employee("Siddharth"));
        synchronizedList.add(new Employee("Manoj"));
        Collections.sort(synchronizedList, new Comparator() {
            public int compare(Object synchronizedListOne, Object synchronizedListTwo) {
                //use instanceof to verify the references are indeed of the type in question
                return ((Employee) synchronizedListOne).name
                        .compareTo(((Employee) synchronizedListTwo).name);
            }
        }); 
    /*for( Employee sd : synchronizedList) {
    log.info("Sorted Synchronized Array List..."+sd.name);
    }*/

        // when iterating over a synchronized list, we need to synchronize access to the synchronized list
        synchronized (synchronizedList) {
            Iterator iterator = synchronizedList.iterator();
            while (iterator.hasNext()) {
                log.info("Sorted Synchronized Array List Items: " + iterator.next().name);
            }
        }

    }
}

class Employee {
    String name;

    Employee(String name) {
        this.name = name;

    }
}
Komentar (1)

jika anda menggunakan Java SE 8, maka ini mungkin bisa membantu.

//create a comparator object using a Lambda expression
Comparator 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);
Komentar (1)

|*| Mengurutkan sebuah List :

import java.util.Collections;

|=> Sort Asc Order :

Collections.sort(NamAryVar);

|=> Jenis Dsc Order :

Collections.sort(NamAryVar, Collections.reverseOrder());

|*| Membalik urutan Daftar :

Collections.reverse(NamAryVar);
Komentar (0)

Anda dapat melakukannya seperti ini:

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

Koleksi memiliki standar Pembanding yang dapat membantu anda dengan itu.

Juga, jika anda ingin menggunakan beberapa Java 8 fitur baru, anda dapat melakukan seperti itu:

List yourList = new ArrayList();
yourList = yourList.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList());
Komentar (0)

Berikut adalah pendek cheatsheet yang meliputi kasus-kasus yang khas:

// sort
list.sort(naturalOrder())

// sort (reversed)
list.sort(reverseOrder())

// sort by field
list.sort(comparing(Type::getField))

// sort by field (reversed)
list.sort(comparing(Type::getField).reversed())

// sort by int field
list.sort(comparingInt(Type::getIntField))

// sort by double field (reversed)
list.sort(comparingDouble(Type::getDoubleField).reversed())

// sort by nullable field (nulls last)
list.sort(comparing(Type::getNullableField, nullsLast(naturalOrder())))

// two-level sort
list.sort(comparing(Type::getField1).thenComparing(Type::getField2))
Komentar (0)

Anda dapat menggunakan seperti itu

ArrayList groupList = new ArrayList();
Collections.sort(groupList, Collections.reverseOrder());
Collections.reverse(groupList);
Komentar (0)

Di JAWA 8 lebih mudah sekarang.

List alphaNumbers = Arrays.asList("one", "two", "three", "four");
List alphaNumbersUpperCase = alphaNumbers.stream()
    .map(String::toUpperCase)
    .sorted()
    .collect(Collectors.toList());
System.out.println(alphaNumbersUpperCase); // [FOUR, ONE, THREE, TWO]

-- Untuk membalikkan menggunakan ini

.sorted(Comparator.reverseOrder())
Komentar (0)

Misalnya saya punya sebuah kelas Orang: String nama, int usia ==>Konstruktor new Orang(nama,umur)

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 myList=new ArrayList
    Collections.sort(myList, new Comparator() {
        @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]]

}
Komentar (1)

Berikut line harus melakukan tebal

testList.sort(Collections.reverseOrder());
Komentar (0)

Dengan Eclipse Koleksi anda bisa membuat primitif ganda daftar, semacam itu dan kemudian membalikkan itu untuk memasukkannya ke dalam urutan. Pendekatan ini akan menghindari tinju ganda.

MutableDoubleList doubleList =
    DoubleLists.mutable.with(
        0.5, 0.2, 0.9, 0.1, 0.1, 0.1, 0.54, 0.71,
        0.71, 0.71, 0.92, 0.12, 0.65, 0.34, 0.62)
        .sortThis().reverseThis();
doubleList.each(System.out::println);

Jika anda ingin Daftar<Ganda>, maka berikut ini akan bekerja.

List objectList =
    Lists.mutable.with(
        0.5, 0.2, 0.9, 0.1, 0.1, 0.1, 0.54, 0.71,
        0.71, 0.71, 0.92, 0.12, 0.65, 0.34, 0.62)
        .sortThis(Collections.reverseOrder());
objectList.forEach(System.out::println);

Jika anda ingin menyimpan jenis sebagai ArrayList<Ganda>, anda dapat menginisialisasi dan mengurutkan daftar menggunakan ArrayListIterate utilitas kelas sebagai berikut:

ArrayList arrayList =
    ArrayListIterate.sortThis(
            new ArrayList(objectList), Collections.reverseOrder());
arrayList.forEach(System.out::println);

Catatan: saya seorang kewajiban untuk Eclipse Koleksi.

Komentar (0)