stream之map的用法
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的用法相关推荐
- Stream生成Map相关用法
AreaSiteMappingViewResponse 类 @ApiModelProperty("区域编号")private String areaCode;@ApiModelPr ...
- java8 stream().map().collect()用法
java8 stream().map().collect()用法 有一个集合: List<User> users = getList(); //从数据库查询的用户集合 现在想获取User的 ...
- Stream的特性、用法、stream().map().collect()用法
Stream的特性.用法.stream().map().collect()用法 1.举例说明 有一个集合: List<User> users = getList(); 现在想获取User的 ...
- 对 Stream 中 Map 与 ForEach 做个简单说明
经常会有童鞋把 Map 和 Foreach 用错,可能会出现如下用法: List<Student> studentChangeList = studentList.stream().for ...
- java stream中Collectors的用法
文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...
- Java8 stream流式表达式用法
一.stream 介绍(抄录一波) Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象. Stream API可以极大提高Java程序 ...
- Java8的 Stream 流的各种用法
Java8 的 Stream 流的各种用法 什么是Stream 1. Stream可以由数组或集合创建,对流的操作分为两种 2. Stream的特性 3. Stream可以通过集合数组创建 4. st ...
- java的collect用法_java8新特性:stream流中collect用法
java8新特性:stream流中collect用法 java8新特性:stream流中collect用法 1.toList List collectList = Stream.of(1, 2, 3, ...
- Java8 stream filter map
java8 中的stream filter map 组合使用能很好的代替for 循环去处理逻辑,而且代码简单明了 public static void main(String[] args) {Lis ...
最新文章
- PCL-1.8.1从源码搭建开发环境二(FLANN库的编译)
- 官宣!邢波出任全球首个AI大学校长,MBZUAI明年1月迎来首批新生
- 第七周项目一-成员函数、友元函数和一般函数有区别(1)
- 揭开雷达的面纱(科普) 发射机
- 如何在servlet刚启动时候获取服务器根目录?
- QT中的滚动条QScrollArea
- ubuntu没有进入图形界面解决办法
- ZOJ-1094-Matrix Chain Multiplication
- Jmeter与数据库的连接
- 【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6)
- JDBC-通过Driver接口获取数据库连接
- 使用py 和flask 实现的服务器系统目录浏览,日志文件实时显示到网页的功能
- Minidump 文件分析工具
- internet信息服务器管理器,细述Win10系统上开启internet信息服务(iis)管理器的操作步骤...
- 安卓改机,改串的研究
- 用平均数和标准差mock数据并保留两位小数
- mybatipse 下载_哇塞!可以免费下载某度文档的doc格式啦
- 3D结构光能否决定未来行业发展新方向?
- 机械臂抓取学习笔记三
- 计算机应用方面中文学术论文写作详细总结