본문 바로가기
언어/JAVA

[TIL]20230615 - 스트림의 toList()가 없다

by tjsdn9803 2023. 6. 16.

문제 발생

자바 문법 강의 중 스트림 부분에서 List를 .stream()을 통해 스트림으로 만들고 .filter()로 만든 후 .toList()를 통해 다시 List로 만들어주는데 .toList()메소드가 존재하지 않았다.

문제 해결을 위한 시도

(List<Book>) 을 작성하여 강제 형변환을 시도하였다.
-> 에러 표시는 나오지 않았지만 컴파일하니 ClassCastException 예외가 발생하였다.

 

문제 해결

그래서 toList를 직접 타이핑 해보니 비슷해보이는 메소드를 인텔리 제이가 추천해주었다.

List는 콜렉션이기도 하고 메소드가 비슷해보여서 사용해보았더니 정상적으로 실행되었고 원하던 List도 얻을 수 있었다.

새롭게 알게 된 점

toList()메소드를 사용할 수 없었던건 나의 자바 버전은 11버전이었기 때문에 toList()메소드가 없었던 것이다.

collect(Collectors.toList())는 자바 17이전에 스트림을 리스트로 바꾸는 메소드였지만 자바 17로 바뀌면서 .toList()가 추가되었고 자바17이상의 버전에서는 collect(Collectors.toList())를 사용하면 .toList()메소드를 추천해준다.

하지만 collect(Collectors.toList())메소드와 .toList()메소드가 완전히 같은것은 아니다.
collect(Collectors.toList())메소드는 수정이 허용되고 Null값이 허용되지만 
toList()메소드는 수정이 불가능하고 Null값이 허용된다.

만약 자바 버전 17이전의 버전을 사용하던 코드에서 수정이 허용되었지만 자바 버전이 바뀌어 toList를 사용하게된다면 이에 대한 대책을 마련해야 할것이다.

 

'언어 > JAVA' 카테고리의 다른 글

[TIL]20230622 - 예외처리  (0) 2023.06.22
[TIL]20230620 - 상속과 다형성  (0) 2023.06.21
[TIL]20230613 - HashSet 의 저장방법  (0) 2023.06.14
[JAVA]변수의 종류  (0) 2023.06.13
[Java]자바의 장점, JVM, JRE, JDK  (0) 2023.06.12