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的更多相关文章

  1. 廖雪峰Java16函数式编程-1Lambda表达式-1Lambda基础

    1. 函数式编程 Java有2类方法: 实例方法:通过实例调用 静态方法:通过类名调用 Java的方法相当于过程式语言的函数 函数式编程(Functional Programing): 把函数作为基本 ...

  2. 廖雪峰Java16函数式编程-2Stream-7其他操作

    1. 排序 Stream<T> sorted(); //按元素默认大小排序(必须实现Comparable接口) Stream<T> sorted(Comparator<? ...

  3. 廖雪峰Java16函数式编程-2Stream-6reduce

    1. 聚合方法 Stream.reduce()是一个Stream的聚合方法:把一个Stream的所有元素聚合成一个结果 例如: Stream.of(1, 2, 3, 4, 5).count(); // ...

  4. 廖雪峰Java16函数式编程-2Stream-5filter

    1.filter简介 Stream.filter()是一个转换方法,把一个Stream转换为另一个Stream. 所谓filter操作,就是对一个Stream的所有元素进行测试,不满足条件的元素就被过 ...

  5. 廖雪峰Java16函数式编程-2Stream-2创建Stream

    1. 方法1:把一个现有的序列变为Stream,它的元素是固定的 //1.直接通过Stream.of()静态方法传入可变参数进行创建 Stream<Integer> s = Stream. ...

  6. 廖雪峰Java16函数式编程-2Stream-1Stream简介

    1. Stream Java8引入全新的Stream API 位于java.util.stream包 1.1 Stream API不同于java.io的InputStream/OutputStream ...

  7. 廖雪峰Java16函数式编程-1Lambda表达式-3方法引用

    Java8引入了Lambda表达式,可以不必编写FunctionalInterface的实现类,直接写Lambda表达式.除了Lambda表达式,我们还可以直接传入方法引用 方法引用是指:如果某个方法 ...

  8. [python学习篇][廖雪峰][2]函数式编程

    函数名也是变量: >>> f = abs >>> f(-10) 10 然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就 ...

  9. 廖雪峰Java6 IO编程-2input和output-4Filter模式

    1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 ...

随机推荐

  1. rmq +二分暴力 hdu 5726

    参考博客 题意:n 个数字的数列,有m个询问:求出  L   到   R 的  gcd(最大公约数 ),然后问这整个序列中有多少个区间的  gcd  和这个一样. 分析:L 到  R的gcd直接用RM ...

  2. 2019-8-31-dotnet-通过-HttpClient-下载文件同时报告进度的方法

    title author date CreateTime categories dotnet 通过 HttpClient 下载文件同时报告进度的方法 lindexi 2019-08-31 16:55: ...

  3. c++ const (转)

    在C++的类定义里面,可以看到类似下面的定义: class List { private: Node * p_head; int length; …… Public: int GetLength () ...

  4. linux hg 查看当前提交的所有版本及注释

    linux hg 查看当前提交的所有版本及注释? linux hg 查看当前提交的所有版本及注释? linux hg 查看当前提交的所有版本及注释? 回答: hg log

  5. memset函数及其用法,C语言memset函数详解

    在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”. 每种类型的变量都有各自的 ...

  6. Linux下安装SkyWalking 6.1版本 以及.NETCore项目集成

    SkyWalking和APM介绍 今天给大家给大家介绍一下SkyWalking,那什么是SkyWalking Skywalking 是 Apache 基金会下面的一个开源 APM 项目 ,那什么又是A ...

  7. html图片导入画布

    首先定义一个画布 canvas id="myCanvas"></canvas> var canvas = document.getElementById('myC ...

  8. 「题解」:x

    问题 A: x 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 赛时想到了正解并且对拍了很久.对拍没挂,但是评测姬表示我w0了……一脸懵逼. 不难证明,如果对于两个数字 ...

  9. NX二次开发-UFUN打开信息窗口UF_UI_open_listing_window()

    NX9+VS2012 #include <uf.h> #include <uf_ui.h> UF_initialize(); //方法1(uc1601) uc1601();// ...

  10. jsonp的原理,应用场景,优缺点

    在开发测试中,难免会在不同域下进行跨域操作,出于安全性考虑,浏览器中的同源策略阻止从一个域上加载的脚本获取或者操作 另一个域下的文档属性,这时需要进行跨域的方式进行解决,如:使用jsonp ,ifra ...