728x90

아래 코드를 보자

public class StreamTest {

    @Test
    void test() {
        List<String> list = List.of("rainsister.tistory.com", "rainsisters.tistory.com", "rainsister.com", "www.rainsisters.com");

        List<String> result = list.stream()
                .filter(e -> e.contains("rainsisters.tistory.com"))
                .filter(e -> e.length() > 17)
                .toList();

        System.out.println(result);
    }

}

혹시 toList() 에 대해서 궁금하지 않은가 ? 요놈은 java 16에서 등장하는 놈이다. 바로 Stream -> List 로 직접 전환해주는 놈이다. java 8 을 사용한 친구라면 안될껄? 그래서 아래 코드들을 테스트 해보려면 아무래도 java 16 이상은 되어야 겠지?
만일 java8 에서는 어떻게 쓸가?

List<String> result = list.stream()
    .filter(e -> e.contains("rainsisters.tistory.com"))
    .filter(e -> e.length() > 17)
    .collect(Collectors.toList());

Stream.toList() 와 Stream.collect(Collectors.toList()) 의 차이점
Stream.toList() 의 내부 코드를 확인 해보면

default List<T> toList() {
    return (List<T>) Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray())));
}

Stream.toList()는 불변의 List를 만든다. 하지만 Stream.collect(Collectors.toList()) 는 일반 List를 만들어낸다. 때문에 추가,삭제작업이 가능하다.
그러면 Collectors 로 불변의 List를 만들려면 어떻게 쓰면 될깡?????
바로 Collectors.toUnmodifiableList() 를 쓰면 된다.
아래와 같이

List<String> result = list.stream()
    .filter(e -> e.contains("rainsisters.tistory.com"))
    .filter(e -> e.length() > 17)
    .collect(Collectors.toUnmodifiableList());


그리고 아쉽게도 Collectors.toUnmodifiableList() 는 java 10 부터 지원하는 함수다 ㅜ.ㅜ
어서 빨리들 java 버전을 업그레이드 하라!

끝!

+ Recent posts