Back-End/JAVA
java List 정렬하기
타부릉
2022. 11. 15. 15:17
[Comparable 인터페이스를 구현하는 방법]
List 에 담을 클래스에 Comparable 인터페이스를 구현하고 Collection.sort 를 사용하여 정렬해 보자.
1. 먼저 Comparable 인터페이스를 구현하는 class 를 생성한다.
class CompTest implements Comparable<CompTest> {
public int num;
public int getNum() {
return num;
}
public CompTest(int num) {
this.num = num;
}
@Override
public int compareTo(CompTest o) {
// num 기준 정렬
return this.num - o.num;
}
@Override
public String toString() {
return "num:" + num;
}
}
2. Collections 의 sort 메소드를 사용하여 정렬한다.
package com.taburu;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortTest {
public static void main(String[] args) {
List<CompTest> list = new ArrayList<>();
list.add(new CompTest(2));
list.add(new CompTest(1));
list.add(new CompTest(3));
Collections.sort(list); // 오름차순
System.out.println("오름차순");
list.forEach(System.out::println);
Collections.sort(list, Collections.reverseOrder()); // 내림차순
System.out.println("내림차순");
list.forEach(System.out::println);
}
}
3. 결과
오름차순
1
2
3
내림차순
3
2
1
[Comparator 를 사용하여 람다와 메소드 레퍼런스를 이용하는 방법]
위에서 사용한 방법과 달리 아래 방법은 상황에 따라 정렬조건을 다르게 설정할 수 있다.
1. 정렬할 class 를 생성한다.
class CompTest {
public int num;
public int num2;
public int getNum() {
return num;
}
public int getNum2() {
return num2;
}
public CompTest(int num, int num2) {
this.num = num;
this.num2 = num2;
}
@Override
public String toString() {
return num + "," + num2;
}
}
2. Comparator 클래스의 comparing 메소드를 사용하여 정렬한다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortTest2 {
public static void main(String[] args) {
List<CompTest> list = new ArrayList<>();
list.add(new CompTest(2, 6));
list.add(new CompTest(1, 5));
list.add(new CompTest(3, 4));
list.sort(Comparator.comparing(CompTest::getNum));
System.out.println("num으로 오름차순");
list.forEach(System.out::println);
list.sort(Comparator.comparing(CompTest::getNum2).reversed());
System.out.println("num2로 내림차순");
list.forEach(System.out::println);
}
}
3. 결과
num으로 오름차순
1,5
2,6
3,4
num2로 내림차순
2,6
1,5
3,4