非短路终端操作

Java8 新特性 Stream 练习实例

非短路终端操作,就是所有的元素都遍厉完,直到最后才结束。用来收集成自己想要的数据。

方法有:

遍厉 forEach

归约 reduce

最大值 max

最小值 min

聚合 collect

计数 count

遍厉 forEach

 //遍厉 forEach
@Test
public void forEachTest() {
list.stream()
.forEach(iter ->
//以json格式输出
System.out.println(
JSON.toJSONString(iter, true)));
}
//在最后的时候输出所有的sku里面的值,不做别的操作

归约 reduce

//归约 reduce
@Test
public void reduceTest() {
//reduce可以对流里面的数值进行,求和,最大值,最小值,拼接。。
//你可以在reduce里面做任何自己想做的操作。
//下面的min,max,都是reduce的简化。
Optional<Double> reduceSum = list.stream()
.map(Sku::getSkuPrice)
.reduce(Double::sum);
System.out.println(reduceSum.get());
//11326.5
Double reduceSumTest = list.stream()
.map(Sku::getSkuPrice)
.reduce(100.00, Double::sum);
System.out.println(reduceSumTest);
//11426.5
Integer reduce = Stream.of(1, 2, 3).
reduce(4,
(integer, integer2) -> integer + integer2,
(integer, integer2) -> integer + integer2);
System.out.println(reduce);
//非并行的结果:10
//并行的结果:18,在of后面加上:parallel()
}

有一篇文章对这个问题分析的特别的好: >>

最大值 max

//最大值 max
@Test
public void maxTest() {
Optional<Double> max = list.stream()
.map(Sku::getSkuPrice)
.max(Double::compareTo);
//如果的别的类型的话,也可以用别的类型里面的compareTo操作
System.out.println(max.get());
//4999.0
}

最小值 min

@Test
public void minTest() {
Optional<Double> min = list.stream()
.map(Sku::getSkuPrice)
.min(Double::compareTo);
//如果的别的类型的话,也可以用别的类型里面的compareTo操作
System.out.println(min.get());
//78.2
}

聚合 collect

//聚合 collect
@Test
public void collectTest() {
Stream<String> s1 = Stream.of("aa", "ab", "c", "ad");
//定义一个谓词
Predicate<String> predicate = t -> t.contains("a");
//通过自定义规则收集自己想要的数据
ArrayList<String> collect = s1.parallel().collect(() -> new ArrayList<String>(),
(array, s) -> {
if (predicate.test(s))
array.add(s);
},
(array1, array2) -> array1.addAll(array2));
collect.forEach(System.out::println);
/**
* aa
* ab
* ad
*/
//也可以用定义好的规则,比如:toList,toSet,toMap...
}

有一篇文章对这个问题分析的特别的好: >>

计数 count

//计数 count
@Test
public void countTest() {
long count = list.stream().count();
System.out.println(count);
}

细节决定成败!

个人愚见,如有不对,恳请扶正!

Java8 新特性 Stream 非短路终端操作的更多相关文章

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

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

  2. Java8 新特性 Stream 无状态中间操作

    无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...

  3. Java8 新特性 Stream() API

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

  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. Java8 新特性Stream 的学习和使用方法

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

  9. java8 新特性 Stream

    1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...

随机推荐

  1. U9创建BE组件

    打开UBF,新建项目->实体项目 输入名称后,点击确定,第二步:修改名称以在后期作为文件夹区分 第三步:创建实体 第四步:添加U9基础对象引用 拖动到解决方案的Reference 第五步:右键构 ...

  2. c# sqlserver 删除大批量数据超时

    我做的项目有个功能需要进行批量删除,删除的数据量有4.5W条数据. 通过下面的sql语句删除这么多数据,直接导致结果超时,无法删除数据. ,,,......) 我查了一些资料,可能找的不全,找到了一个 ...

  3. pycharm工具设置py模板

    直接上截图把,更加明确清晰 (a)shebang行 #!/usr/bin/python3 (b)预定义的变量要扩展为格式为$ {<variable_name>}的相应值. 可用的预定义文件 ...

  4. Java异常相关知识总结

    异常: 概述:java程序运行过程中出现的错误 常见的异常: StackOverflowError ArrayIndexOutOfBoundsException NullPointerExceptio ...

  5. react-custom-scrollbars的使用

    react-custom-scrollbars的作用 流畅的本机浏览器滚动 移动设备的本机滚动条 完全可定制 自动隐藏 自动高度 通用(在客户端和服务器上运行) requestAnimationFra ...

  6. IPv6地址类型和操作

    IPv6地址的号段划分和前缀表示法: IPv6拥有128位巨大的地址空间,对于那么大的空间,也不是随意的划分,而是使用按照bit位进行号段划分 地址结构图 全局路由前缀 (48位) 子网ID (16位 ...

  7. fatal error: openssl/bn.h: No such file or directory

    出现如下错误 fatal error: openssl/bn.h: No such file or directory 解决办法 # sudo apt-get install libssl-dev

  8. 从未被Google过 #NerverBeenGoogled

    我相信大家都用Google搜索互联网上的东西,Google会跟踪你搜索的所有内容,但是你或许不知道,他们也记录着从未被Google过的内容.我有个清单,这些是有史以来从未被Google过的一些东西1. ...

  9. bat延迟执行脚本,利用choice实现定时执行功能

    choice是选择语句,具体语法另外再讲.今天利用它来实现定时执行功能.废话少说直接上代码: 示例一: @echo off for %%a in (我 是 一 个 中 国 人) do ping -n ...

  10. idea基本使用

    1.java项目导jar包 File->Project Structure->Modules->Dependencies->+ 2. 鼠标放在方法上一段时间后,显示该方法的注释 ...