[java] ArrayList를 정렬하는 방법?

Java에 Doubles 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



답변

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

그것은 당신이 원하는 것을 할 것입니다. Collections그래도 가져와야합니다 !

에 대한 설명서는 다음과 같습니다Collections .


답변

내림차순 :

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


답변

java.util.Collections 클래스 의 util 메소드를 사용하십시오.

Collections.sort(list)

사실, 커스텀 객체를 정렬하고 싶다면

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

컬렉션 API를 참조하십시오


답변

예를 들어 Java 8에서 마술을 할 것입니다.

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

그러나 정렬하려는 객체의 일부 필드를 기준으로 정렬하려면 다음과 같이 쉽게 수행 할 수 있습니다.

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

또는

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

또는

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

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


답변

람다 (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 인터페이스에는 구현할 단일 메소드 만 있기 때문에 람다를 사용할 수 있으므로 VM이 구현중인 메소드를 추론 할 수 있습니다. 매개 변수의 유형을 유추 할 수 있으므로 설명 할 필요가 없습니다 (예 : (a, b)대신 (Double a, Double b). 람다 본문에는 한 줄만 있고 메서드는 값을 반환 할 것으로 예상되므로, return유추 및 중괄호 필요하지 않습니다.


답변

Java8에는 List 인터페이스에 기본 정렬 방법이 있는데,이를 통해 Comparator를 제공하는 경우 컬렉션을 정렬 할 수 있습니다. 다음과 같이 질문의 예를 쉽게 정렬 할 수 있습니다.

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

참고 : 람다의 args는 Double로 전달되면 스왑됩니다.


답변

포함 된 요소가 있는지 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) 수 있습니다.리스트에는 비교 가능한 유형의 객체가 포함되어 있으며 정렬 할 수 있습니다. 순서는 compareTo방법에 따라 다릅니다 . 자세한 정보는 https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html 을 확인 하십시오.