FlatMap 返回 List 而不是 List 后 Java Stream 收集
2024-02-27

我使用 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>.

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

提前谢谢了。

Edit:

该问题是由 Eclipse 引起的(现在使用带有 java 8 补丁 1.0.0.v20140317-1956 的 Kepler SR2)。如果使用 javac 进行编译,或者按照 Holger 的评论,使用 Netbeans 进行编译,则不会出现该问题


类型推断是一项新功能。在工具和 IDE 完全开发出来之前,我建议使用显式类型的 lambda。在某些情况下,如果缺少显式转换,Eclipse 甚至会崩溃,但现在已修复。

这是一个解决方法:

输入“s1”:

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

或者使用通用参数:

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());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FlatMap 返回 List 而不是 List 后 Java Stream 收集 的相关文章

随机推荐