无状态中间操作

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 无状态中间操作的更多相关文章

  1. Java8 新特性 Stream() API

    新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...

  2. Java8 新特性 Stream 非短路终端操作

    非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...

  3. Java8 新特性 Stream 短路终端操作

    短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 none ...

  4. 这可能是史上最好的 Java8 新特性 Stream 流教程

    本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...

  5. java8新特性--Stream的基本介绍和使用

    什么是Stream? Stream是一个来自数据源的元素队列并可以进行聚合操作. 数据源:流的来源. 可以是集合,数组,I/O channel, 产生器generator 等 聚合操作:类似SQL语句 ...

  6. Java8新特性Stream流应用示例

    Java8新特性介绍 过滤集合 List<String> newList = list.stream().filter(item -> item != null).collect(C ...

  7. Java8 新特性 Stream 练习实例

    练习实例 配合Java8 新特性 Steam() API 使用 //没有写get set 构造方法 public class Sku { private Integer skuId; private ...

  8. 漫漫人生路-学点Jakarta基础-Java8新特性 Stream/Lambda

    背景 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk dat ...

  9. Java8 新特性Stream 的学习和使用方法

    流(Stream) 流是java 8 中新引入的特性,用来处理集合中的数据,Stream 是一个来自数据源的元素队列并支持聚合操作. Java 中 Stream 不会存储元素. 数据源 流的来源. 可 ...

随机推荐

  1. Mysql EF Core 快速构建 Web Api

    (1)首先创建一个.net core web api web项目; (2)因为我们使用的是ef连接mysql数据库,通过NuGet安装MySql.Data.EntityFrameworkCore,以来 ...

  2. Oh-My-Zsh的配置与使用

    什么是Shell? 相对于内核来说,Shell是Linux/Unix的一个外壳,它负责外界与Linux内核的交互,接收用户或其他应用程序的命令,然后把这些命令转化成内核能理解的语言,传给内核,内核是真 ...

  3. spring boot的异常处理

    原文:https://blog.csdn.net/tianyaleixiaowu/article/details/70145251 全局异常处理是个比较重要的功能,一般在项目里都会用到. 我大概把一次 ...

  4. EM算法直观认识

    Expectation Maximization, 字面翻译为, "最大期望". 我个人其实一直都不太理解EM算法, 从我个人的渊源来看, 之前数理统计里面的参数估计, 也是没有太 ...

  5. windows elasticsearch使用ik分词器插件后启动报错java.security.AccessControlException: access denied ("java.io.FilePermission" "D:...........\plugins\ik-analyzer\config\IKAnalyzer.cfg.xml" "read")

    删除es安装文件夹中空格,遂解决......(哭

  6. Swagger从入门到放弃

    如何编写基于OpenAPI规范的API文档 简介 Swagger Swagger是一个简单但功能强大的API表达工具.支持的语言种类繁多 使用Swagger生成API,我们可以得到交互式文档,自动生成 ...

  7. 渗透技巧——Windows系统的帐户隐藏

    渗透技巧——Windows系统的帐户隐藏 2017-11-28-00:08:55  0x01 帐户隐藏的方法 该方法在网上已有相关资料,本节只做简单复现 测试系统:·Win7 x86/WinXP 1. ...

  8. jetbrains 系列编辑器

    下载 webstorm下载地址:https://www.jetbrains.com/webstorm/download/previous.html idea下载地址:https://www.jetbr ...

  9. 简易解说拉格朗日对偶(Lagrange duality)(转载)

    转载自https://www.cnblogs.com/90zeng/p/Lagrange_duality.html,本人觉得讲的非常好! 1.原始问题 假设是定义在上的连续可微函数(为什么要求连续可微 ...

  10. JAVA的toString方法的一个小例子

    Object是一个抽象类,他有很有方法,其中的toString方法是我们常见的一个方法,我们可以看这段代码 package com.com.day1; public class ToStringTes ...