【发布时间】:2014-07-27 12:31:59
【问题描述】:
我使用 Java 8 流尝试了以下代码:
Arrays.asList("A", "B").stream()
.flatMap(s -> Arrays.asList("X", "Y").stream().map(s1 -> s + s1)).collect(Collectors.toList());
我得到的是List<Object>,而我期待的是List<String>。如果我删除收集并尝试:
Arrays.asList("A", "B").stream().flatMap(s -> Arrays.asList("X", "Y").stream().map(s1 -> s + s1));
我正确地得到了Stream<String>。
我哪里错了?有人能帮我吗?
非常感谢。
编辑:
问题是由于 Eclipse(现在使用带有 java 8 补丁 1.0.0.v20140317-1956 的 Kepler SR2)。如果使用 javac 进行编译,或者正如 Holger 所评论的,使用 Netbeans 进行编译,则不会出现该问题
【问题讨论】:
-
不适合我。它返回
Stream<String>。你用的是哪个编译器? -
@Holger,我在 Eclipse 中编译
-
好吧,Eclipse 的 Java 8 支持仍在开发中,但我建议您仔细检查您在 Eclipse 中编写的代码是否与您在此处编写的代码相匹配,然后再指责 Eclipse,因为它看起来不对我来说就像一个棘手的语言结构(编译器极端案例)。使用
Kepler SR2和JDT Patch with Java 8 1.0.0.v20140317-1956可以正常工作。 -
@Holger,你对流的看法是对的,我已经更新了我的问题,显然问题不在流中,而是在我最初删除以(过度)简化我的问题的集合中跨度>
-
好的,现在它看起来像一个 Eclipse 问题。使用
Netbeans,您可以正确收集到List<String>
标签: java eclipse java-8 java-stream flatmap