Java stream.map 和 stream.forEach 区别

map

<R> Stream<R> map(Function<? super T, ? extends R> mapper)

map 方法接收一个功能型接口,功能型接口接收一个参数,返回一个值。map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素。该方法是 Intermediate 操作

Stream<String> stream = Stream.of("a", "b", "c", "d");
stream.map(String::toUpperCase).forEach(System.out::println);

以上代码通过 map 方法,把 a, b, c, d 全部转变成大写,然后输出

forEach

void forEach(Consumer<? super T> action)

forEach 接收一个 Consumer 接口,该接口我们之前讲 Function 包时已经提过了。它只接收不参数,没有返回值。然后在 Stream 的每一个元素上执行该表达式

范例:

Stream<String> stream = Stream.of("I", "love", "you");
stream.forEach(System.out::println);

区别

生成一个新的对象的时候,使用 map 会更好;只是操作 list 内部的对象时,用 forEach

这段代码,是无效的(appList 不会变化):

appMemberList.stream().map(appMember -> appList.add(appMember.getApp()));

要改成 forEach 才行

appMemberList.stream().forEach(appMember -> appList.add(appMember.getApp()));
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • “孟夏之际,万物并秀…群贤毕至…集思广益…筚路蓝缕…凿空之旅…桃李不言,下自成蹊…马可波罗…伏尔泰…莱布尼茨…雄汉...
    遗忘也是一种选择阅读 558评论 0赞 1
  • 对我来说可能就是彩铅吧~哈哈。感觉太酷了~
    懵小六撕烤随笔阅读 460评论 0赞 0
  • 昨晚一夜未眠,老公的呼噜声阵阵,小宝也不停的要吃奶,嘴里一直含着奶头,可苦了我!谁知老公第二天还说我也打呼噜!估计...
    e0cb2b4a7b1b阅读 290评论 0赞 0

友情链接更多精彩内容