flatMap返回列表后的Java流收集<;对象>;而不是列表<;字符串>;

flatMap返回列表后的Java流收集<;对象>;而不是列表<;字符串>;,java,eclipse,java-8,java-stream,flatmap,Java,Eclipse,Java 8,Java Stream,Flatmap,我使用Java 8流尝试了以下代码: Arrays.asList("A", "B").stream() .flatMap(s -> Arrays.asList("X", "Y").stream().map(s1 -> s + s1)).collect(Collectors.toList()); 我得到的是一个列表,而我期望的是一个列表。如果我删除collect并尝试: Arrays.asList("A", "B").stream().flatMap(s -&

我使用Java 8流尝试了以下代码:

Arrays.asList("A", "B").stream()
            .flatMap(s -> Arrays.asList("X", "Y").stream().map(s1 -> s + s1)).collect(Collectors.toList());
我得到的是一个
列表
,而我期望的是一个
列表
。如果我删除collect并尝试:

Arrays.asList("A", "B").stream().flatMap(s -> Arrays.asList("X", "Y").stream().map(s1 -> s + s1));
我正确地得到了一个

我错在哪里?有人能帮我吗

非常感谢

编辑:


这个问题是由Eclipse造成的(现在在Java8补丁1.0.0.v20140317-1956中使用开普勒SR2)。如果使用javac进行编译,或者如Holger所评论的那样,使用Netbeans进行编译,那么这个问题就不会出现。类型推断是一个新特性。在完全开发工具和IDE之前,我建议使用显式类型的lambda。有些情况下,如果显式强制转换丢失,Eclipse甚至会崩溃,但现在已经修复了

这里有一个解决方法:

使用键入的“s1”:

或使用genric参数:

asList.stream()
   .flatMap(s -> Arrays.asList("X", "Y").stream().<String>map(s1 -> s + s1))
   .collect(Collectors.toList());

不适合我。它返回
。您使用的是哪种编译器?@Holger,我正在EclipseWell内部编译,Eclipse的Java 8支持仍在开发中,但我建议您仔细检查您在Eclipse内部编写的代码是否与您在此处编写的代码匹配,然后再责备Eclipse,因为它看起来不像一个复杂的语言构造(编译器角案例)对我来说。使用
Kepler SR2
JDT补丁与Java 8 1.0.0.v20140317-1956
它工作正常。@霍尔格,关于流,你是对的,我更新了我的问题,显然问题不在流中,而是在收集中,我最初删除了收集,以简化我的问题。好的,现在看起来像是一个Eclipse问题。使用
Netbeans
可以正确地收集到
列表中
asList.stream()
   .flatMap(s -> Arrays.asList("X", "Y").stream().<String>map(s1 -> s + s1))
   .collect(Collectors.toList());
asList.stream()
   .flatMap(s -> Arrays.asList("X", "Y").stream().map(s::concat))
   .collect(Collectors.toList());