Java8 新特性 Stream 无状态中间操作
无状态中间操作
中间无状态操作,可以在单个对单个的数据进行处理。比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)...
过滤 filter
映射 map
扁夹化 flatMap
遍厉 peek
过滤 filter
接收一个谓词断言,boolean Pridicate< T > 根据返回值类型来确定是否过滤这一条属性。
// 过滤 filter
@Test
public void filterTest() {
list.stream()
//过滤掉所有小于2000的商品
.filter(sku -> sku.getSkuPrice() > 2000)
.forEach(item ->
System.out.println(
JSON.toJSONString(
item.getSkuName()+item.getSkuPrice(),
true)));
/**
* 输出的结果
* "无人机4999.0"
* "VR一体机2299.0"
* "跑步机2699.0"
*/
映射 map
流支持map方法,接收一个Function< T,R > 函数型接口,这个方法会应用每个元素都,并且把他们映射成一个新的流。其实在上面的例子中已经用的非常的多了,比如说,接收一个SKu类型的流,但是经过map以后,返回的是String的流。
//映射 map
@Test
public void mapTest() {
list.stream()
//用方法引用取出来sku中的所有的商品名称
.map(Sku::getSkuName)
.forEach(item -> System.out.println(item));
/**
* 无人机
* VR一体机
* 纯色衬衫
* 牛仔裤
* 跑步机
* Java编程思想
* Java核心技术
* 算法
* TensorFlow进阶指南
*/
}
扁平化 flatMap
flatMap方法就是让你一个流中的每个值都换成另一个流,把所有的流都边接成为一个流:例
//扁夹化 flatMap
@Test
public void flatMap() {
List<String> words = Arrays.asList("Java 8", "Lambdas", "In", "Action");
List<String[]> listStringArrays = words.stream()
//分割每一个单词
.map(word -> word.split(""))
//对所有的元素去重
.distinct()
//收集成list集合
.collect(Collectors.toList());
listStringArrays.forEach(arr ->
System.out.println(Arrays.toString(arr)));
/**
* 非扁平化
* 这是把每一个数组当成了一整个元素,
* 然后对一整个数组进行去重,
* 如果数组没有重复的就不会去重
* [J, a, v, a, , 8]
* [L, a, m, b, d, a, s]
* [I, n]
* [A, c, t, i, o, n]
*/
List<String> listString = words.stream()
//映射成String[]数组流
.map(word -> word.split(""))
//扁平化
.flatMap(Arrays::stream)
//去重
.distinct()
//排序
.sorted()
//收集
.collect(Collectors.toList());
listString.forEach(System.out::println);
/**
* 扁平化是把所有的数组map映射出来的数组流
* 转换成一个流,而不是一个数组流,这样就可以去重了
* 8 A I J L a b c d i m n o s t v
*/
}
遍厉 peek
和终端操作一样,都是进行循环的。用的是peek方法,里面接收一个comsumer方法。这个方法最能体现无状态中间操作的:
//遍厉 peek
@Test
public void peekTest() {
list.stream()
//获取商品名称
.map(Sku::getSkuName)
//遍厉
.peek(skuName -> System.out.println(skuName + " peek"))
.forEach(System.out::println);
/**
* 看结果是和forEach效替进行输出,而不是peek输出之后再进行forEach
* 说明,peek不用在所有的元素的基础上进行操作,只用消费就行了
*
* 无人机 peek
* 无人机
* VR一体机 peek
* VR一体机
* 纯色衬衫 peek
* 纯色衬衫
* 牛仔裤 peek
* 牛仔裤
* 跑步机 peek
* 跑步机
* Java编程思想 peek
* Java编程思想
* Java核心技术 peek
* Java核心技术
* 算法 peek
* 算法
* TensorFlow进阶指南 peek
* TensorFlow进阶指南
*/
list.stream()
//获取商品名称
.map(Sku::getSkuName)
//遍厉
.peek(skuName -> System.out.println(skuName + " peek"))
//排序
.sorted()
.forEach(System.out::println);
/**
* 这个地方就是加了一个有状态中间操作
* 因为排序必须在所有的数据基础上进行操作的
*
* 无人机 peek
* VR一体机 peek
* 纯色衬衫 peek
* 牛仔裤 peek
* 跑步机 peek
* Java编程思想 peek
* Java核心技术 peek
* 算法 peek
* TensorFlow进阶指南 peek
* Java核心技术
* Java编程思想
* TensorFlow进阶指南
* VR一体机
* 无人机
* 牛仔裤
* 算法
* 纯色衬衫
* 跑步机
*/
}
细节决定成败!
个人愚见,如有不对,恳请扶正!
Java8 新特性 Stream 无状态中间操作的更多相关文章
- Java8 新特性 Stream() API
新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...
- Java8 新特性 Stream 非短路终端操作
非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...
- Java8 新特性 Stream 短路终端操作
短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 none ...
- 这可能是史上最好的 Java8 新特性 Stream 流教程
本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...
- java8新特性--Stream的基本介绍和使用
什么是Stream? Stream是一个来自数据源的元素队列并可以进行聚合操作. 数据源:流的来源. 可以是集合,数组,I/O channel, 产生器generator 等 聚合操作:类似SQL语句 ...
- Java8新特性Stream流应用示例
Java8新特性介绍 过滤集合 List<String> newList = list.stream().filter(item -> item != null).collect(C ...
- Java8 新特性 Stream 练习实例
练习实例 配合Java8 新特性 Steam() API 使用 //没有写get set 构造方法 public class Sku { private Integer skuId; private ...
- 漫漫人生路-学点Jakarta基础-Java8新特性 Stream/Lambda
背景 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk dat ...
- Java8 新特性Stream 的学习和使用方法
流(Stream) 流是java 8 中新引入的特性,用来处理集合中的数据,Stream 是一个来自数据源的元素队列并支持聚合操作. Java 中 Stream 不会存储元素. 数据源 流的来源. 可 ...
随机推荐
- 微信小程序入门小结
- Lucene queryParser和analysis有什么不同?
在Lucene1.4.3中,queryParser和analysis分成独立的两个包,queryParser作用是解析查询语句,analysis作用是分词,queryParser在解析查询语句的时候会 ...
- Java获取客户端真实IP地址
Java代码 import javax.servlet.http.HttpServletRequest; /** * 获取对象的IP地址等信息 */ public class IPUtil { /** ...
- UITableView与UITableViewCell
转自:http://blog.sina.com.cn/s/blog_4cd14afb01014j97.html UITableView用来以表格的形式显示数据.关于UITableView,我们应该注意 ...
- Asp.net管道模型之(HttpModules 和 HttpHandler)
上一节我们从大概范围介绍了管道模型的整体流程,我们从其中知道管道最重要的两大组件为:HttpModules 跟 HttpHandler.今天我们着重来介绍一下这两大组件 一:asp.net处理管道 从 ...
- Deep Q Network(DQN)原理解析
1. 前言 在前面的章节中我们介绍了时序差分算法(TD)和Q-Learning,当状态和动作空间是离散且维数不高时可使用Q-Table储存每个状态动作对的Q值,而当状态和动作空间是高维连续时,使用Q- ...
- ConcurrentSkipListMap的常用方法
package com.geo.map; import java.util.Iterator;import java.util.Map.Entry;import java.util.Set;impo ...
- 10-tensorflow-tf.concat()
Concatenates tensors along one dimension. t1 = [[1, 2, 3], [4, 5, 6]] t2 = [[7, 8, 9], [10, 11, 12]] ...
- CloudCompare打开pcd文件
Ubuntu下CloudCompare稳定版本无法打开pcd点云文件,切换到edge版本即可 $ sudo snap refresh --edge cloudcompare
- LG5357 「模板」AC自动机(二次加强版) AC自动机+fail树
问题描述 LG5357 题解 不是fail树的AC自动机复杂度是假的. 把AC自动机搞出来,建立Trie树,树上爆搜一遍就好了. \(\mathrm{Code}\) #include<bits/ ...