map函数的作用就是针对管道流中的每一个数据元素进行转换操作。

一、Stream管道流map的基础用法
最简单的需求:将集合中的每一个字符串,全部转换成大写!

List<String> alpha = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur");//不使用Stream管道流
List<String> alphaUpper = new ArrayList<>();
for (String s : alpha) {alphaUpper.add(s.toUpperCase());
}
System.out.println(alphaUpper); //[MONKEY, LION, GIRAFFE, LEMUR]// 使用Stream管道流
List<String> collect = alpha.stream().map(String::toUpperCase).collect(Collectors.toList());
//上面使用了方法引用,和下面的lambda表达式语法效果是一样的
//List<String> collect = alpha.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());System.out.println(collect); //[MONKEY, LION, GIRAFFE, LEMUR]

二、处理非字符串类型集合元素
map()函数不仅可以处理数据,还可以转换数据的类型。如下:

List<Integer> lengths = alpha.stream().map(String::length).collect(Collectors.toList());System.out.println(lengths); //[6, 4, 7, 5]
Stream.of("Monkey", "Lion", "Giraffe", "Lemur").mapToInt(String::length).forEach(System.out::println);

输出如下:

6
4
7
5

除了mapToInt。还有maoToLong,mapToDouble等等用法

三、再复杂一点:处理对象数据格式转换

还是使用上一节中的Employee类,创建10个对象。需求如下:

将每一个Employee的年龄增加一岁
将性别中的“M”换成“male”,F换成Female。

public static void main(String[] args){Employee e1 = new Employee(1,23,"M","Rick","Beethovan");Employee e2 = new Employee(2,13,"F","Martina","Hengis");Employee e3 = new Employee(3,43,"M","Ricky","Martin");Employee e4 = new Employee(4,26,"M","Jon","Lowman");Employee e5 = new Employee(5,19,"F","Cristine","Maria");Employee e6 = new Employee(6,15,"M","David","Feezor");Employee e7 = new Employee(7,68,"F","Melissa","Roy");Employee e8 = new Employee(8,79,"M","Alex","Gussin");Employee e9 = new Employee(9,15,"F","Neetu","Singh");Employee e10 = new Employee(10,45,"M","Naveen","Jain");List<Employee> employees = Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10);/*List<Employee> maped = employees.stream().map(e -> {e.setAge(e.getAge() + 1);e.setGender(e.getGender().equals("M")?"male":"female");return e;}).collect(Collectors.toList());*/List<Employee> maped = employees.stream().peek(e -> {e.setAge(e.getAge() + 1);e.setGender(e.getGender().equals("M")?"male":"female");}).collect(Collectors.toList());System.out.println(maped);}

由于map的参数e就是返回值,所以可以用peek函数。peek函数是一种特殊的map函数,当函数没有返回值或者参数就是返回值的时候可以使用peek函数。

四、flatMap
map可以对管道流中的数据进行转换操作,但是如果管道中还有管道该如何处理?即:如何处理二维数组及二维集合类。实现一个简单的需求:将“hello”,“world”两个字符串组成的集合,元素的每一个字母打印出来。如果不用Stream我们怎么写?写2层for循环,第一层遍历字符串,并且将字符串拆分成char数组,第二层for循环遍历char数组。

List<String> words = Arrays.asList("hello", "word");
words.stream().map(w -> Arrays.stream(w.split("")))    //[[h,e,l,l,o],[w,o,r,l,d]].forEach(System.out::println);

输出打印结果:

java.util.stream.ReferencePipeline$Head@3551a94
java.util.stream.ReferencePipeline$Head@531be3c5

用map方法是做不到的,这个需求用map方法无法实现。map只能针对一维数组进行操作,数组里面还有数组,管道里面还有管道,它是处理不了每一个元素的。

flatMap可以理解为将若干个子管道中的数据全都,平面展开到父管道中进行处理。

words.stream().flatMap(w -> Arrays.stream(w.split(""))) // [h,e,l,l,o,w,o,r,l,d].forEach(System.out::println);

输出打印结果:

h
e
l
l
o
w
o
r
d

stream之map的用法相关推荐

  1. Stream生成Map相关用法

    AreaSiteMappingViewResponse 类 @ApiModelProperty("区域编号")private String areaCode;@ApiModelPr ...

  2. java8 stream().map().collect()用法

    java8 stream().map().collect()用法 有一个集合: List<User> users = getList(); //从数据库查询的用户集合 现在想获取User的 ...

  3. Stream的特性、用法、stream().map().collect()用法

    Stream的特性.用法.stream().map().collect()用法 1.举例说明 有一个集合: List<User> users = getList(); 现在想获取User的 ...

  4. 对 Stream 中 Map 与 ForEach 做个简单说明

    经常会有童鞋把 Map 和 Foreach 用错,可能会出现如下用法: List<Student> studentChangeList = studentList.stream().for ...

  5. java stream中Collectors的用法

    文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...

  6. Java8 stream流式表达式用法

    一.stream 介绍(抄录一波) Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象. Stream API可以极大提高Java程序 ...

  7. Java8的 Stream 流的各种用法

    Java8 的 Stream 流的各种用法 什么是Stream 1. Stream可以由数组或集合创建,对流的操作分为两种 2. Stream的特性 3. Stream可以通过集合数组创建 4. st ...

  8. java的collect用法_java8新特性:stream流中collect用法

    java8新特性:stream流中collect用法 java8新特性:stream流中collect用法 1.toList List collectList = Stream.of(1, 2, 3, ...

  9. Java8 stream filter map

    java8 中的stream filter map 组合使用能很好的代替for 循环去处理逻辑,而且代码简单明了 public static void main(String[] args) {Lis ...

最新文章

  1. PCL-1.8.1从源码搭建开发环境二(FLANN库的编译)
  2. 官宣!邢波出任全球首个AI大学校长,MBZUAI明年1月迎来首批新生
  3. 第七周项目一-成员函数、友元函数和一般函数有区别(1)
  4. 揭开雷达的面纱(科普) 发射机
  5. 如何在servlet刚启动时候获取服务器根目录?
  6. QT中的滚动条QScrollArea
  7. ubuntu没有进入图形界面解决办法
  8. ZOJ-1094-Matrix Chain Multiplication
  9. Jmeter与数据库的连接
  10. 【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6)
  11. JDBC-通过Driver接口获取数据库连接
  12. 使用py 和flask 实现的服务器系统目录浏览,日志文件实时显示到网页的功能
  13. Minidump 文件分析工具
  14. internet信息服务器管理器,细述Win10系统上开启internet信息服务(iis)管理器的操作步骤...
  15. 安卓改机,改串的研究
  16. 用平均数和标准差mock数据并保留两位小数
  17. mybatipse 下载_哇塞!可以免费下载某度文档的doc格式啦
  18. 3D结构光能否决定未来行业发展新方向?
  19. 机械臂抓取学习笔记三
  20. 计算机应用方面中文学术论文写作详细总结

热门文章

  1. Ubuntu下安装ROS以及使用ROS读取T265、D435i数据
  2. 《五维数字孪生模型及十个领域应用探索》
  3. CorelDRAW中如何做正片叠底效果
  4. Manjaro(kde) 安装nvidia显卡驱动(optimus-manager管理)
  5. HP Laserjet M1005 MFP找不到扫描功能的解决办法
  6. JS中同步和异步问题及其区别
  7. 量化投资学习——关于创业板价格笼子订单的说明
  8. 计蒜客 信息学题库 T1068 救援
  9. 计算机应用毕业作品,计算机应用毕业设计论文参考
  10. 西门子S7 看PDU