首页 > Java > 在Java 8中,和方法有什么区别?Stream.map()Stream.flatMap()

在Java 8中,和方法有什么区别?Stream.map()Stream.flatMap()

上一篇 下一篇

在Java 8中,和方法有什么区别?Stream.map()Stream.flatMap()

分割线

网友回答:

Stream.flatMap,正如其名称所猜测的那样,是 a 和 a 操作的组合。这意味着您首先将函数应用于元素,然后将其展平。 仅将函数应用于流,而不平展流。mapflatStream.map

要了解平流的组成,请考虑具有“两个级别”的结构。扁平化这意味着将其转换为“一级”结构:[ [1,2,3],[4,5,6],[7,8,9] ][ 1,2,3,4,5,6,7,8,9 ]

分割线

网友回答:

两者都可以应用于 a,它们都返回 .不同之处在于,该操作为每个输入值生成一个输出值,而该操作为每个输入值生成任意数量(零个或多个)值。mapflatMapStream<T>Stream<R>mapflatMap

这反映在每个操作的参数中。

该操作采用 ,该值为输入流中的每个值调用,并生成一个结果值,该结果值将发送到输出流。mapFunction

该操作采用一个函数,该函数在概念上想要使用一个值并生成任意数量的值。但是,在 Java 中,方法返回任意数量的值很麻烦,因为方法只能返回零个或一个值。可以想象一个 API,其中映射器函数获取一个值并返回一个数组或一个值,然后将其发送到输出。鉴于这是流库,表示任意数量的返回值的一种特别合适的方法是映射器函数本身返回流!映射器返回的流中的值将从流中排出并传递到输出流。每次调用映射器函数返回的值“团块”在输出流中根本没有区分,因此输出被称为“扁平化”。flatMapflatMapList

典型的用途是映射器函数返回,如果它想要发送零值,或者如果它想要返回多个值。但是,当然可以返回任何流。flatMapStream.empty()Stream.of(a, b, c)

分割线

网友回答:

我想举两个例子来获得实际的观点:

第一个示例使用:map

@Test
public void convertStringToUpperCaseStreams() {
    List<String> collected = Stream.of("a", "b", "hello") // Stream of String 
            .map(String::toUpperCase) // Returns a stream consisting of the results of applying the given function to the elements of this stream.
            .collect(Collectors.toList());
    assertEquals(asList("A", "B", "HELLO"), collected);
}

在第一个示例中没有什么特别的,a 用于返回大写。FunctionString

第二个示例使用:flatMap

@Test
public void testflatMap() throws Exception {
    List<Integer> together = Stream.of(asList(1, 2), asList(3, 4)) // Stream of List<Integer>
            .flatMap(List::stream)
            .map(integer -> integer + 1)
            .collect(Collectors.toList());
    assertEquals(asList(2, 3, 4, 5), together);
}

在第二个示例中,传递了列表流。它不是整数流!

如果必须使用转换函数(通过映射),则首先必须将流平展为其他内容(整数流)。

如果删除,则返回以下错误:运算符 + 未定义参数类型 List,int。flatMap

不可能在整数上应用 + 1!List

模板简介:该模板名称为【在Java 8中,和方法有什么区别?Stream.map()Stream.flatMap()】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 203次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-16
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信素材 微信文章 微信模板 html5 企业网站 自适应 微信公众平台 微信图片 响应式 单页式简历模板
您可能会喜欢的其他模板