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.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)
정렬 하는 데 사용할 수 있습니다 . 그렇지 않으면 다음과 같이 해당 인터페이스를 구현하는 것이 좋습니다.list
list
Comparable
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 을 확인 하십시오.