当前位置: 首页 > 知识库问答 >
问题:

在平面映射返回列表而不是列表后收集 Java 流

彭海阳
2023-03-14

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

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

我得到的是一个< code >列表

Arrays.asList("A", "B").stream().flatMap(s -> Arrays.asList("X", "Y").stream().map(s1 -> s + s1));

我正确地得到了一个

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

提前表示感谢。

编辑:

这个问题是由于Eclipse造成的(现在使用的是带有java 8补丁1.0.0.v20140317-1956的开普勒SR2)。如果使用javac或Holger评论的使用Netbeans进行编译,则不会出现问题


共有1个答案

申屠涛
2023-03-14
匿名用户

类型推断是一项新功能。在工具和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());

如果在< code>flatMap而不是< code>map之前添加参数,情况也是如此。

但我建议您使用s::concat

asList.stream()
   .flatMap(s -> Arrays.asList("X", "Y").stream().map(s::concat))
   .collect(Collectors.toList());

 类似资料:
  • 我试图访问MyModelClass上的getter方法,但我的代码返回

  • 我有这样的查询,我想从中提取电影标题及其评级 但此列表显然不能存储具有2个值的结果集 在了解它之后,我发现例如这个链接Spring Data: JPA repository findAll()返回*Map而不是List?但我似乎不清楚它们的实现。 我不明白他们从哪里得到第一个链接中的长值 我如何创建我的地图? 电影类: 评级等级:

  • 在Java 8中,我越来越多地用替换返回值。 所以我曾经有: 我现在使用: 我对此的论点是: 它强制执行基础列表的不变性。 它隐藏了存在基础列表的事实。之后可以将其更改为集合或其他结构,而无需更改方法签名 它很好地封装了该方法的用户希望对项进行处理,而不是对列表进行处理 如果需要,它可以在以后进行简单的并行化 事实上,现在,在我的代码中,返回<code>列表 显然,其中一些可以通过不可变集合来实现

  • 我有这个代码: 它产生的是 很高兴我应该如何写映射方法来得到一个地图,它会给我:

  • 我有一个实体,看起来像这样: 输入数据是一个