我对惰性求值的概念还不熟悉。当我在Scala中执行这行代码时;
"12334".grouped(1).toStream.filter{n => println("n:" +n ); n=="3";}
它将打印出:
n:1
n:2
n:3
但是当我在Java中运行类似的代码:
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);});
它在不向控制台输出任何内容的情况下默默地终止。对我来说,Java的行为更合理,因为流是惰性求值的,我没有收集或尝试打印结果。但是在Scala中,即使我没有使用流,它也会打印出一些信息。那么我的问题是是什么导致这种差异?