在flatMap返回List而不是List之后收集Java Stream
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在flatMap返回List而不是List之后收集Java Stream,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1179字,纯文字阅读大概需要2分钟。
内容图文
![在flatMap返回List而不是List之后收集Java Stream](/upload/InfoBanner/zyjiaocheng/733/751fb949c29040e59352368e9cbf3a5b.jpg)
我使用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(现在使用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());
或者使用genric参数:
asList.stream()
.flatMap(s -> Arrays.asList("X", "Y").stream().<String>map(s1 -> s + s1))
.collect(Collectors.toList());
如果在flatMap之前添加参数而不是map,则也是如此.
但我建议你使用s :: concat:
asList.stream()
.flatMap(s -> Arrays.asList("X", "Y").stream().map(s::concat))
.collect(Collectors.toList());
内容总结
以上是互联网集市为您收集整理的在flatMap返回List而不是List之后收集Java Stream全部内容,希望文章能够帮你解决在flatMap返回List而不是List之后收集Java Stream所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。