I'm new to the concept of lazy evaluation. When I execute this line of code in Scala;
"12334".grouped(1).toStream.filter{n => println("n:" +n ); n=="3";}
It prints out:
n:1
n:2
n:3
But when I run something similar in Java, like:
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);});
It terminates silently without writing anything to console line. Java's behavior seems more reasonable to me because Streams are lazily evaluated and I did not collect or try to print result. But in Scala even if I did not consume stream it prints out some information. So my question is what is causing that difference?