我正在阅读新发布的Java 8 in Action,发现第5章中有一段代码没有编译:
List<Integer> numbers1 = Arrays.asList(1, 2, 3);
List<Integer> numbers2 = Arrays.asList(3, 4);
List<int[]> pairs =
numbers1.stream()
.flatMap((Integer i) -> numbers2.stream()
.map(j -> new int[]{i, j})
)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
Eclipse说:"类型不匹配:无法转换List<Object>为List<int[]>"
在与作者对Github的内容进行比较后,编译如下:
List<Integer> numbers1 = Arrays.asList(1, 2, 3);
List<Integer> numbers2 = Arrays.asList(3, 4);
List<int[]> pairs =
numbers1.stream()
.flatMap((Integer i) -> numbers2.stream()
.map((Integer j) -> new int[]{i, j})
)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
唯一的变化是从"j"到"(整数j)".
但是第一个版本是不是完全等同于Java 8提供的语法糖的第二个版本?为什么Java拒绝编译它?
谢谢
BTW:
java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java …Run Code Online (Sandbox Code Playgroud)