13
저는 게으른 평가라는 개념에 익숙하지 않습니다. 스칼라에서이 코드 줄을 실행할 때;스칼라 스트림과 Java 스트림 게으름의 차이
"12334".grouped(1).toStream.filter{n => println("n:" +n); n=="3";}
그것은 출력합니다 : 자동으로 라인을 콘솔에 아무것도 작성하지 않고
List<String> myList = new ArrayList<>(Arrays.asList("12334".split("")));
Stream<String> myList2 = myList.stream().filter(a -> {System.out.println("a:" +a);return "3".equals(a);});
그것은 종료 :
n:1
n:2
n:3
을하지만 같은 자바에서 비슷한 일을 실행할 때. Streams가 늦게 평가되어서 나는 결과를 수집하거나 시도하지 않았기 때문에 Java의 동작이 나에게 더 합리적인 것처럼 보입니다. 그러나 스칼라에서 스트림을 소비하지 않더라도 일부 정보가 출력됩니다. 그래서 내 질문은 무엇이 그 차이를 일으키는 것입니까?