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

Java List.replaceAll() 메서드 완벽 정리 – UnaryOperator로 리스트 요소 일괄 변환하기

List 인터페이스의 replaceAll() 메서드는 특정 연산을 나타내는 UnaryOperator 객체를 매개변수로 받아, 현재 리스트의 모든 요소에 해당 연산을 수행한 후 기존 값을 그 결과로 대체합니다.

주요 특징

  • 리스트의 모든 요소에 동일한 연산을 한 번에 적용할 수 있습니다.
  • 연산 결과가 원본 리스트에 직접 반영되는 제자리(in-place) 방식으로 동작합니다.
  • Java 8부터 도입된 기능으로, 람다식이나 메서드 참조와 함께 사용하면 코드가 훨씬 간결해집니다.

예제 코드

아래 예제에서는 문자열을 대문자로 변환하는 UnaryOperator를 구현한 뒤, 리스트의 모든 요소를 대문자로 일괄 변경합니다.

import java.util.ArrayList;
import java.util.function.UnaryOperator;

// 문자열을 대문자로 변환하는 UnaryOperator 구현 클래스
class Op implements UnaryOperator<String> {
    public String apply(String str) {
        return str.toUpperCase();
    }
}

public class Test {
    public static void main(String[] args) throws CloneNotSupportedException {
        ArrayList<String> list = new ArrayList<>();
        list.add("Java");
        list.add("JavaScript");
        list.add("CoffeeScript");
        list.add("HBase");
        list.add("OpenNLP");
        System.out.println("Contents of the list: " + list);

        // 모든 요소를 대문자로 변환하여 대체
        list.replaceAll(new Op());

        System.out.println("Contents of the list after replace operation: \n" + list);
    }
}

실행 결과

Contents of the list: [Java, JavaScript, CoffeeScript, HBase, OpenNLP]
Contents of the list after replace operation:
[JAVA, JAVASCRIPT, COFFEESCRIPT, HBASE, OPENNLP]

람다식으로 더 간결하게 작성하기

별도의 구현 클래스 없이 람다식을 사용하면 위 코드를 한 줄로 줄일 수 있습니다.

list.replaceAll(str -> str.toUpperCase());

또한 메서드 참조를 활용하면 다음과 같이 작성할 수도 있습니다.

list.replaceAll(String::toUpperCase);

정리

replaceAll()은 리스트 전체를 변환할 때 for 루프를 직접 작성하는 것보다 간결하고 가독성이 뛰어난 선택입니다. 다만 이 메서드는 원본 리스트 자체를 수정하므로, 기존 데이터를 보존해야 하는 경우에는 미리 복사본을 만들어 두는 것이 좋습니다.