자바 8에서 stream을 사용해 리스트로 뭉치기

List<String> request = List.of("hello", "world", "spring");

request.stream()
    .map(String::toUpperCase)
    .collect(Collectors.toList());

문자열 리스트를 대문자로 변경하는 간단한 코드입니다.

보통 자바8을 사용하면 stream을 사용해서 리스트를 반환할 때 Collectors.toList() 를 사용합니다.

자바 16에서 stream을 사용해 리스트로 뭉치기

그런데 자바 16 이상을 사용한다면 대신 사용할 수 있는 메서드가 존재합니다.

바로 toList() 입니다.

List<String> request = List.of("hello", "world", "spring");

request.stream()
    .map(String::toUpperCase)
    .toList();

코드가 훨씬 간단하죠? 하지만 toList() 는 사용시 주의할 점이 하나 존재합니다.

바로 toList() 메서드는 불변 리스트를 반환한다는 것입니다.

toList() 가 불변 리스트를 반환한다고?

이해를 돕기 위해서 예시 코드를 확인해보죠.

public List<String> listAddToList(List<String> request) {
    List<String> uppercase = request.stream()
            .map(String::toUpperCase)
            .toList();
    uppercase.add(0, "first");

    return uppercase;
}

문자열 리스트를 받아서 제일 앞에 first 를 추가하는 로직이 추가되었습니다.

그냥 본다면 별 문제가 없어보이네요? 😒

진짜 문제가 없는지 바로 테스트 코드를 작성해봅시다.