현재 프로젝에서는 JAVA17(LTS)을 사용하고 있는데, 이전 버전에서는 주로 Stream.collect(toList())을 사용하여 개발하였다. 17로 버전을 업데이트하고 나니 sonarlint에서 Stream.toList()로 변경하는 것을 권장하는데 이유가 무엇인지 궁금했다. 그리고 Stream.toList 와 Stream.collect(toList())는 무작정 서로 대체해도 사용해도 되는 것인지 궁금해서 공부해보았다.
Stream.collect(Collectors.toList())와 Stream.toList()는 똑같은 형태의 구현체로 반환되지 않는다.
IDE에서 Stream.toList()로 변경하는 것을 권장하는데 대체해서 사용해도 되는가? 무작정 대체해서 쓰는 것은 좋지않다. Stream.toList()의 경우 수정이 불가능한데, 로직에서 수정을 해야하는 경우가 발생한다면 Exception이 발생할 것이다. Stream.toList()는 NPE 발생과 수정 가능하다는 취약점을 보완할 수 있지만, 로직에서 변경된 부분을 적용해도 이슈가 없을지 잘 확인하고 사용하는 것이 중요하다. 테스트 코드를 잘 짜서 확인해보는 것이 필요할 것 같다.