Fil*_*sso 3 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());
Run Code Online (Sandbox Code Playgroud)
我得到的是List<Object>
我想要的一段时间List<String>
.如果我删除收集,我尝试:
Arrays.asList("A", "B").stream().flatMap(s -> Arrays.asList("X", "Y").stream().map(s1 -> s + s1));
Run Code Online (Sandbox Code Playgroud)
我正确得到了Stream<String>
.
我哪里错了?有人能帮我吗?
提前谢谢了.
编辑:
问题是由于Eclipse(现在使用Kepler SR2和java 8补丁1.0.0.v20140317-1956).如果使用javac进行编译,或者如Holger所评论,使用Netbeans进行编译,则不会出现此问题
类型推断是一项新功能.在完全开发工具和IDE之前,我建议使用明确键入的lambdas.如果缺少显式的强制转换,那么Eclipse甚至会崩溃,但现在已经修复了.
这是一个解决方法:
使用键入的"s1":
asList.stream()
.flatMap(s -> Arrays.asList("X", "Y").stream().map((String s1) -> s + s1))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
或者使用genric参数:
asList.stream()
.flatMap(s -> Arrays.asList("X", "Y").stream().<String>map(s1 -> s + s1))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如果您之前添加参数flatMap
而不是,则同样如此map
.
但我建议你使用s::concat
:
asList.stream()
.flatMap(s -> Arrays.asList("X", "Y").stream().map(s::concat))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4452 次 |
最近记录: |