小编Ton*_*ang的帖子

为什么在Eclipse中使用类型推理编译的这个java 8示例?

我正在阅读新发布的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)

java lambda java-8

8
推荐指数
1
解决办法
5836
查看次数

标签 统计

java ×1

java-8 ×1

lambda ×1