Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 람다(Lambda) 표현식으로 컬렉션 정렬하기

Java 8부터 도입된 람다 표현식(Lambda Expression)은 코드를 간결하게 작성할 수 있게 해주는 강력한 기능입니다. 특히 컬렉션(Collection)의 요소를 정렬할 때, 별도의 Comparator 클래스나 익명 내부 클래스를 구현하는 번거로움 없이 한 줄의 람다식만으로 원하는 정렬 기준을 지정할 수 있습니다.

1. 람다 표현식으로 리스트(List) 요소 정렬하기

Collections.sort() 메소드에 람다식을 전달하여 ArrayList의 요소를 내림차순으로 정렬하는 예제입니다.

예제 코드

import java.util.*;
public class Demo{
    public static void main(String[] args){
        ArrayList<Integer> my_arr = new ArrayList<Integer>();
        my_arr.add(190);
        my_arr.add(267);
        my_arr.add(12);
        my_arr.add(0);
        System.out.println("정렬 전 배열 리스트의 요소 : " + my_arr);
        Collections.sort(my_arr, (o1, o2) -> (o1 > o2) ? -1 : (o1 < o2) ? 1 : 0);
        System.out.println("정렬 후 배열 리스트의 요소 : " + my_arr);
    }
}

출력 결과

정렬 전 배열 리스트의 요소 : [190, 267, 12, 0]
정렬 후 배열 리스트의 요소 : [267, 190, 12, 0]

코드 설명: Demo 클래스의 main 함수 안에서 Integer 타입의 ArrayList를 생성한 뒤, add() 함수를 이용해 네 개의 숫자를 추가합니다. 이후 Collections.sort() 함수를 호출하면서 두 번째 인자로 람다 표현식을 전달하는데, 이 람다식은 삼항 연산자를 사용해 두 요소(o1, o2)의 크기를 비교합니다.

(o1 > o2) ? -1 : (o1 < o2) ? 1 : 0 부분은 첫 번째 요소가 두 번째 요소보다 클 때 -1을 반환하도록 설계되어 있어, 결과적으로 내림차순(Descending Order) 정렬이 수행됩니다. 반대로 오름차순으로 정렬하고 싶다면 비교 결과의 부호만 반대로 바꿔주면 됩니다.

2. 람다 표현식으로 TreeMap 요소 정렬하기

TreeMap은 기본적으로 키(Key)를 오름차순으로 정렬하지만, 객체 생성 시점에 람다식으로 비교자(Comparator)를 직접 전달하면 정렬 기준을 자유롭게 변경할 수 있습니다.

예제 코드

import java.util.*;
public class Demo{
    public static void main(String[] args){
        TreeMap<Integer, String> my_treemap = new TreeMap<Integer, String>((o1, o2) -> (o1 > o2) ? -1 : (o1 < o2) ? 1 : 0);
        my_treemap.put(56, "Joe");
        my_treemap.put(43, "Bill");
        my_treemap.put(21, "Charolette");
        my_treemap.put(33, "Jonas");
        System.out.println("트리맵에 저장된 요소들 : " + my_treemap);
    }
}

출력 결과

트리맵에 저장된 요소들 : {56=Joe, 43=Bill, 33=Jonas, 21=Charolette}

코드 설명: 이번 예제 역시 Demo 클래스의 main 함수 안에서 진행됩니다. TreeMap을 생성할 때 생성자의 인자로 람다 표현식(내림차순 비교자)을 직접 전달한다는 점이 핵심입니다. put() 함수를 사용해 키-값(Key-Value) 쌍을 추가한 후 콘솔에 출력하면, 키가 56, 43, 33, 21 순으로 내림차순 정렬되어 저장된 것을 확인할 수 있습니다.

정리

람다 표현식을 활용하면 기존의 익명 내부 클래스 방식보다 훨씬 간결하고 가독성 좋은 코드를 작성할 수 있습니다. List 계열은 Collections.sort()에 람다식을 전달하고, TreeMap은 생성자 인자에 람다식을 넘기는 방식으로, 오름차순·내림차순 등 다양한 정렬 기준을 손쉽게 적용할 수 있습니다.