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

为什么Stream::FlatMap的这种用法是错误的?

昝存
2023-03-14

我希望能够像这样使用Stream::FlatMap

public static List<String> duplicate(String s) {

    List<String> l = new ArrayList<String>();
    l.add(s);
    l.add(s);

    return l;
}


listOfStrings.stream().flatMap(str -> duplicate(str)).collect(Collectors.toList());

但我得到以下编译器错误

test.java:25:错误:不兼容类型:无法推断类型变量R ListofStrings.Stream().FlatMap(str->duplicate(str)).Collect(Collectors.ToList());

scala> List(1,2,3).flatMap(duplicate(_))
res0: List[Int] = List(1, 1, 2, 2, 3, 3)

为什么这不是Java中flatMap的有效用法?

共有1个答案

夏侯阳
2023-03-14

FlatMap中的lambda表达式需要返回一个,这可以从FlatMap的参数看出,它的类型是Function<?超级T,?扩展流<?扩展r>>

下面的代码可以很好地编译和运行:

listOfStrings.stream()
             .flatMap(str -> duplicate(str).stream()) // note the .stream() here
             .collect(Collectors.toList());

因为lambda表达式str->duplicate(str).stream()的类型为function

 类似资料:
  • 问题内容: 我希望能够像这样使用Stream :: flatMap 但是我得到以下编译器错误 Test.java:25:错误:不兼容的类型:无法推断类型变量R listOfStrings.stream()。flatMap(str-> plicate(str))。collect(Collectors.toList()); (参数不匹配; lambda表达式List中的错误返回类型无法转换为Strea

  • 我对编程很陌生,我已经自学了将近一个月了,有谁能给我解释一下我代码中错误的原因吗?在“Total(moneyConv(moneySum*moneyRate))”中出错。行,表示实际和形式的论点在长度上是不同的。我检查了我所有的参数,我觉得很好。多谢!

  • 问题内容: 注意到今天在我们的代码库中有一行代码,我认为肯定会因语法错误而使构建失败,但是测试通过了,显然它实际上是有效的python(在2.x和3中)。 条件表达式有时不需要空格: 如果LHS是变量,则不起作用: 但是它似乎仍然可以与其他类型的文字一起使用: 这是怎么回事,出于某种原因,它是否有意成为语法的一部分?这个奇怪的怪癖是已知/记录的行为吗? 问题答案: 令牌之间的空白 除逻辑行的开头或

  • 我收到一个错误: /app处的OS错误/ [Errno 63]文件名太长:"/Users/XXX/test app/templates/jinja 2/{ ' items ':[{ '-':'-',' A': 'a ',' B': 'b ',' C: 'c ',' D': 'd'}]} 我想将json_parse方法的结果的<code>json_dict</code>嵌入到<code>视图中。将复

  • 通过一组转换进行筛选和按键分组: 关于如何让它更好的性能,有什么想法吗?谢谢你的帮助!

  • 问题内容: T_PAAMAYIM_NEKUDOTAYIM听起来真的很异国情调,但对我来说绝对是胡说八道。我将其全部追溯到以下代码行: 在构造函数中,我创建一个Config对象。这是课程: 不知道为什么这不起作用/错误是什么意思… 问题答案: T_PAAMAYIM_NEKUDOTAYIM是PHP使用的双冒号范围解析–:: 快速浏览一下您的代码,我认为这一行: 应该 第一种是静态调用方法的方式-如果$