映射,可以将一个流的元素按照一定的映射规则映射到另一个流中。分为mapflatMap

  • map:接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。

  • flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。

「案例一:英文字符串数组的元素全部改为大写。整数数组每个元素+3。」

public class StreamTest {public static void main(String[] args) {String[] strArr = { "abcd", "bcdd", "defde", "fTr" };List<String> strList = Arrays.stream(strArr).map(String::toUpperCase).collect(Collectors.toList());List<Integer> intList = Arrays.asList(1, 3, 5, 7, 9, 11);List<Integer> intListNew = intList.stream().map(x -> x + 3).collect(Collectors.toList());System.out.println("每个元素大写:" + strList);System.out.println("每个元素+3:" + intListNew);}
}

「案例二:将员工的薪资全部增加1000。」

public class StreamTest {public static void main(String[] args) {List<Person> personList = new ArrayList<Person>();personList.add(new Person("Tom", 8900, 23, "male", "New York"));personList.add(new Person("Jack", 7000, 25, "male", "Washington"));personList.add(new Person("Lily", 7800, 21, "female", "Washington"));personList.add(new Person("Anni", 8200, 24, "female", "New York"));personList.add(new Person("Owen", 9500, 25, "male", "New York"));personList.add(new Person("Alisa", 7900, 26, "female", "New York"));// 不改变原来员工集合的方式List<Person> personListNew = personList.stream().map(person -> {Person personNew = new Person(person.getName(), 0, 0, null, null);personNew.setSalary(person.getSalary() + 10000);return personNew;}).collect(Collectors.toList());System.out.println("一次改动前:" + personList.get(0).getName() + "-->" + personList.get(0).getSalary());System.out.println("一次改动后:" + personListNew.get(0).getName() + "-->" + personListNew.get(0).getSalary());// 改变原来员工集合的方式List<Person> personListNew2 = personList.stream().map(person -> {person.setSalary(person.getSalary() + 10000);return person;}).collect(Collectors.toList());System.out.println("二次改动前:" + personList.get(0).getName() + "-->" + personListNew.get(0).getSalary());System.out.println("二次改动后:" + personListNew2.get(0).getName() + "-->" + personListNew.get(0).getSalary());}
}

「案例三:将两个字符数组合并成一个新的字符数组。」

public class StreamTest {public static void main(String[] args) {List<String> list = Arrays.asList("m,k,l,a", "1,3,5,7");List<String> listNew = list.stream().flatMap(s -> {// 将每个元素转换成一个streamString[] split = s.split(",");Stream<String> s2 = Arrays.stream(split);return s2;}).collect(Collectors.toList());System.out.println("处理前的集合:" + list);System.out.println("处理后的集合:" + listNew);}
}

Java8 Stream详解~映射(map/flatMap)相关推荐

  1. Java8 Stream详解~排序:sorted

    sorted,中间操作.有两种排序: sorted():自然排序,流中元素需实现Comparable接口 sorted(Comparator com):Comparator排序器自定义排序 「案例:将 ...

  2. Java8 Stream详解~收集(collect)

    collect,收集,可以说是内容最繁多.功能最丰富的部分了.从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合. 1 归集(toList/toSet/toMap) ...

  3. Java8 Stream详解~归约(reduce)

    归约,也称缩减,顾名思义,是把一个流缩减成一个值,能实现对集合求和.求乘积和求最值操作. 「案例一:求Integer集合的元素之和.乘积和最大值.」 public class StreamTest { ...

  4. Java8 Stream详解~筛选:filter

    筛选,是按照一定的规则校验流中的元素,将符合条件的元素提取到新的流中的操作. 「案例一:筛选出Integer集合中大于7的元素,并打印出来」 public class StreamTest {publ ...

  5. Java8 Stream详解~ 提取/组合

    流也可以进行合并.去重.限制.跳过等操作. public class StreamTest {public static void main(String[] args) {String[] arr1 ...

  6. Java8 Stream详解~聚合(max/min/count)

    max.min.count这些字眼你一定不陌生,没错,在mysql中我们常用它们进行数据统计.Java stream中也引入了这些概念和用法,极大地方便了我们对集合.数组的数据统计工作. 「案例一:获 ...

  7. Java8 Stream详解~遍历/匹配(foreach/find/match)

    Stream也是支持类似集合的遍历和匹配元素的,只是Stream中的元素是以Optional类型存在的.Stream的遍历.匹配非常简单. // import已省略,请自行添加,后面代码亦是publi ...

  8. Java8 Stream详解~Stream 创建

    Stream可以通过集合数组创建. 1.通过 java.util.Collection.stream() 方法用集合创建流 List<String> list = Arrays.asLis ...

  9. Java8 Stream详解~Stream概述

    Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利. 那么什么是Stream? Stream将要处 ...

最新文章

  1. ubuntu14.04上搭建android开发环境
  2. 小记mysql备份同库中一张表的历史记录
  3. Kotlin教程(九)泛型
  4. 最直接的解决服务器宕机的方法
  5. golang实现生产者和消费者
  6. java学习与总结:操作系统
  7. html5 实现坦克大战,HTML5实现坦克大战(一)
  8. “约见”面试官系列之常见面试题第九篇vue实现双向绑定原理(建议收藏)
  9. Python 找出1与100之间的全部“同构数”
  10. CSS定位 position
  11. C++ 纯虚函数 虚函数 override
  12. Atitit.sql where条件表达式的原理  attilax概括
  13. 【Vue.js】iconfont中unicode引用和unicode引用失败,无法显示icon
  14. mac 程序员装机必备 一篇齐全
  15. 恒温箱温度计算机控制系统仿真,实验用恒温箱控制系统设计及其模型建立
  16. kettle官网下载地址
  17. WEB前端常用的设计模式总结
  18. 干货 | 扫了那么多二维码,15款工具打造你的专属二维码
  19. 敏捷测试的关键成功要素
  20. 零基础学 Python(17):if 条件语句

热门文章

  1. 论文浅尝 - ACL2020 | 一种用于关系三元组提取的级联二进制标记框架
  2. 百度一口气亮出NLP十年积累:完整技术布局全面披露,面向业界砸下11项七夕大礼
  3. 推荐 10 个饱受好评且功能独特的开源人工智能项目
  4. 谷歌发布端到端AI平台,还有用于视频和表格的AutoML、文档理解API等多款工具
  5. 线上服务CPU100%问题快速定位实战
  6. JAVA学习(十)__MessageFormat用法
  7. 《金狐系统维护盘》六周年纪念版UD/ISO +PE维护
  8. 牛客18987 粉嘤花之恋(矩阵快速幂、斐波那契数列)
  9. hadoop 重新格式化 NameNode
  10. Leetcode--94. 二叉树的中序遍历(迭代递归)