프로그래밍 언어/자바(JAVA)

Collectors.toUnmodifiableList() 불변 리스트

나아가는중 2023. 3. 29. 00:22
반응형

.toUnmodifiableList() 란?

.toUnmodifiableList는 자바 10부터 추가된 기능 중 하나로, java.util.stream.Stream 인터페이스에서 제공하는 메소드 중 하나입니다. 이 메소드는 스트림에서 요소를 수집하여 변경 불가능한 리스트(java.util.List)로 반환합니다. 반환된 리스트는 요소를 추가, 수정, 삭제할 수 없으므로, 불변성을 보장합니다.

 

다음과 같이 스트림을 생성하고, toUnmodifiableList 메소드를 호출하여 변경 불가능한 리스트를 생성할 수 있습니다.

toList() 메소드는 스트림에서 수집한 요소를 리스트로 반환합니다. 하지만 toList() 대신 toUnmodifiableList()를 호출하면, 반환된 리스트는 변경할 수 없습니다.


예제 코드

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class UnmodifiableListTest {

    @Test
    void unmodifiableListTest() {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        List<Integer> evenNumbers = numbers.stream()
                .filter(n -> n % 2 == 0)
                .collect(Collectors.toUnmodifiableList());

        Assertions.assertThrows(UnsupportedOperationException.class, () -> evenNumbers.add(6));
        Assertions.assertEquals(Arrays.asList(2, 4), evenNumbers);
    }
}

.toUnmodifiableList 메소드로 반환된 변경 불가능한 리스트에 요소를 추가하려고 하면 UnsupportedOperationException 예외가 발생합니다.

 

반응형