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