廖雪峰Java16函数式编程-2Stream-4map
1. map()简介
Stream.map()是一个Stream的转换方法,把一个stream转换为另一个Stream,这2个Stream是按照映射函数一一对应的。
所谓map操作,就是把一种操作运算映射到序列的每个元素上。
例如:f(x)=x^2,对x计算它的平方,把这个函数映射到一个序列{1, 2, 3, 4, 5},就得到另一个序列{1, 4, 9, 16, 25}。这2个Stream是按照映射函数一一对应的

Stream<Integer> s = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> s2 = s.map((n)->n*n);
2. map过程
map()接收的Function的接口,负责把1个T类型转换为R类型
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
3. map示例
3.1 使用map获取全部大写的Stream
public class StreamMapSample {
public static void main(String[] args){
String[] array = "Stream API supports functional-style operation".split(" ");
Stream<String> stream = Arrays.stream(array);
stream.map(String::toUpperCase).forEach(System.out::println);
}
}

### 3.2 将String类型转换为Person类型
```#java
import java.util.Arrays;
import java.util.stream.Stream;
class Person{
String name;
char gener;
public Person(String name,char gender){
this.name = name;
this.gener = gender;
}
public String toString(){
return "Person( "+name+", "+gener+" )";
}
}
public class StreamMapSample2 {
public static void main(String[] args){
String[] inputs = {"Bob,M","Alice,F","Time,M","Lily,F"};
Stream names = Arrays.stream(inputs);
Stream persons = names.map((s)->{
int n = s.indexOf(",");
String name = s.substring(0,n);
char gender = s.charAt(n+1);
return new Person(name,gender);
});
persons.forEach(System.out::println);
}
}
<img src="https://img2018.cnblogs.com/blog/1418970/201909/1418970-20190907115829407-228901990.png" width="500" />
## 4. 总结:
map()方法:
* 将一个Stream的每个元素映射成另一个元素并生成一个新的Stream
* 可以将一种元素类型转换成另一种元素类型
廖雪峰Java16函数式编程-2Stream-4map的更多相关文章
- 廖雪峰Java16函数式编程-1Lambda表达式-1Lambda基础
1. 函数式编程 Java有2类方法: 实例方法:通过实例调用 静态方法:通过类名调用 Java的方法相当于过程式语言的函数 函数式编程(Functional Programing): 把函数作为基本 ...
- 廖雪峰Java16函数式编程-2Stream-7其他操作
1. 排序 Stream<T> sorted(); //按元素默认大小排序(必须实现Comparable接口) Stream<T> sorted(Comparator<? ...
- 廖雪峰Java16函数式编程-2Stream-6reduce
1. 聚合方法 Stream.reduce()是一个Stream的聚合方法:把一个Stream的所有元素聚合成一个结果 例如: Stream.of(1, 2, 3, 4, 5).count(); // ...
- 廖雪峰Java16函数式编程-2Stream-5filter
1.filter简介 Stream.filter()是一个转换方法,把一个Stream转换为另一个Stream. 所谓filter操作,就是对一个Stream的所有元素进行测试,不满足条件的元素就被过 ...
- 廖雪峰Java16函数式编程-2Stream-2创建Stream
1. 方法1:把一个现有的序列变为Stream,它的元素是固定的 //1.直接通过Stream.of()静态方法传入可变参数进行创建 Stream<Integer> s = Stream. ...
- 廖雪峰Java16函数式编程-2Stream-1Stream简介
1. Stream Java8引入全新的Stream API 位于java.util.stream包 1.1 Stream API不同于java.io的InputStream/OutputStream ...
- 廖雪峰Java16函数式编程-1Lambda表达式-3方法引用
Java8引入了Lambda表达式,可以不必编写FunctionalInterface的实现类,直接写Lambda表达式.除了Lambda表达式,我们还可以直接传入方法引用 方法引用是指:如果某个方法 ...
- [python学习篇][廖雪峰][2]函数式编程
函数名也是变量: >>> f = abs >>> f(-10) 10 然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就 ...
- 廖雪峰Java6 IO编程-2input和output-4Filter模式
1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...
随机推荐
- rmq +二分暴力 hdu 5726
参考博客 题意:n 个数字的数列,有m个询问:求出 L 到 R 的 gcd(最大公约数 ),然后问这整个序列中有多少个区间的 gcd 和这个一样. 分析:L 到 R的gcd直接用RM ...
- 2019-8-31-dotnet-通过-HttpClient-下载文件同时报告进度的方法
title author date CreateTime categories dotnet 通过 HttpClient 下载文件同时报告进度的方法 lindexi 2019-08-31 16:55: ...
- c++ const (转)
在C++的类定义里面,可以看到类似下面的定义: class List { private: Node * p_head; int length; …… Public: int GetLength () ...
- linux hg 查看当前提交的所有版本及注释
linux hg 查看当前提交的所有版本及注释? linux hg 查看当前提交的所有版本及注释? linux hg 查看当前提交的所有版本及注释? 回答: hg log
- memset函数及其用法,C语言memset函数详解
在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”. 每种类型的变量都有各自的 ...
- Linux下安装SkyWalking 6.1版本 以及.NETCore项目集成
SkyWalking和APM介绍 今天给大家给大家介绍一下SkyWalking,那什么是SkyWalking Skywalking 是 Apache 基金会下面的一个开源 APM 项目 ,那什么又是A ...
- html图片导入画布
首先定义一个画布 canvas id="myCanvas"></canvas> var canvas = document.getElementById('myC ...
- 「题解」:x
问题 A: x 时间限制: 1 Sec 内存限制: 256 MB 题面 题面谢绝公开. 题解 赛时想到了正解并且对拍了很久.对拍没挂,但是评测姬表示我w0了……一脸懵逼. 不难证明,如果对于两个数字 ...
- NX二次开发-UFUN打开信息窗口UF_UI_open_listing_window()
NX9+VS2012 #include <uf.h> #include <uf_ui.h> UF_initialize(); //方法1(uc1601) uc1601();// ...
- jsonp的原理,应用场景,优缺点
在开发测试中,难免会在不同域下进行跨域操作,出于安全性考虑,浏览器中的同源策略阻止从一个域上加载的脚本获取或者操作 另一个域下的文档属性,这时需要进行跨域的方式进行解决,如:使用jsonp ,ifra ...