DEV-STUDY/Java

[Java] cannot find symbol [ERROR] symbol: method toList()

HwangJerry 2023. 7. 4. 19:54

다음은 코드트리를 풀다가 컴파일 에러가 발생했던 코드이다.

List<Weather> ansList = li.stream()
        .filter(o -> o.weather.equals("Rain"))
        .sorted(Comparator.comparing(Weather::getDate)
                .thenComparing(Weather::getDay))
        .toList();

위 코드는 인텔리제이 IDE에서는 문제가 되지 않았다. 따라서 의심 없이 제출을 눌렀는데, 컴파일 에러가 발생하였다. 런타임 에러면 이전에 배열을 사용중이었기에 indexException이겠거니 하겠지만, 컴파일 에러라고 하니 "오타가 있나?" 하고 봤다. 하지만 생각해보니 정상적으로 실행되었던 코드이기에 자바 버전 문제임을 느끼고 검색을 했다.

 

Stream.toList()는 자바 16부터 등장한 메서드로, 현재 인텔리제이에서는 자바 17을 사용중이니 큰 문제 없이 사용할 수 있었지만, 코드트리 환경은 자바8 또는 자바11로 예상된다. 그렇기에 알아들을 수 없었던 것이다.

 

위 코드를 자바11 환경에서도 컴파일하기 위해서는 .toList()가 아닌 .collect(Collectors.toList())를 사용해야 한다.

List<Weather> ansList = li.stream()
        .filter(o -> o.weather.equals("Rain"))
        .sorted(Comparator.comparing(Weather::getDate)
                .thenComparing(Weather::getDay))
        .collect(Collectors.toList());;