스트림의 collect와 toList
30 Dec 2024인텔리제이의 스트림 구문에서 주의 표시가 나와서 확인해보니 .collect(Collectors.toList()) 대신 .toList로 사용하라는 문구가 나왔다.
왜 그런지 알아보자!
collect?
자바 스트림에서 collect 메서드는 스트림의 원소들을 수집해서, 원하는 컬렉션으로 반환하는 데 사용된다.
collect() 메서드는 종결 연산으로 스트림을 최종적으로 처리하여 결과를 반환한다.
또한, Collector 객체(스트림의 요소를 수집하는 방식을 정의하는 객체)를 인자로 받는다.
그냥 .collect() 를 사용하면 되지, 왜 toList()를 사용하라고 주의룰 줄까?
답은 간결성과 불변성에 있다.
간결성
Stream.toList()는 Collectors.toList()를 사용하는 것보다 더 간결하다.
Stream.collect(Collectors.toList())는 collect() 메서드를 사용하여 Collector를 명시적으로 제공하는 방식인데, Stream.toList()는 이러한 중간 단계를 생략하고 직접 리스트를 반환한다.
불변성
Stream.toList()는 반환된 리스트가 불변하도록 보장한다.
이는 리스트가 수정되지 않도록 강제하기 때문에 코드의 안정성을 높이는 데 도움을 준다.
반면, Collectors.toList()는 기본적으로 가변 리스트를 반환하기 때문에, 리스트를 수정할 수 있다.
실제로 코드를 까보면 unmodifiableList로 불변 리스트를 반환한다.
그러므로 IDE에서는 간결성과 불변성을 제공하는 toList()를 사용하기를 권장하는 것이다.