非短路终端操作

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. Flask笔记:文件上传

    文件上传 enctype:在HTML中的form表单中form标签默认是`enctype="application/x-www-form-urlencoded"`,在文件上传时需要 ...

  2. vue学习指南:第七篇(详细) - Vue的 组件通信

    Vue 的 父传子 子传父 一.父组件向子组件传值: 父传子 把需要的数据 传递给 子组件,以数据绑定(v-bind)的形式,传递到子组件内部,供子组件使用  缩写是(:) 1.创建子组件,在src/ ...

  3. [b0016] python 归纳 (二)_静态方法和类方法

    # -*- coding: UTF-8 -*- """ 测试 类的静态方法,类方法 @staticmethod @classmethod 总结: 1. self 指向类对 ...

  4. 多线程学习笔记(三) BackgroundWorker 暂停/继续

    BackgroundWorker bw; private ManualResetEvent manualReset = new ManualResetEvent(true); private void ...

  5. Linux下CPU利用率和负载的关系

    1.CPU利用率和负载 CPU利用率显示的是程序在运行期间实时占用的CPU百分比:cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进 ...

  6. py2,py3区别 ,基础网络常识,多线程,

    1.编译型:把代码编译成机器码,计算机找虚拟机执行代码,机器码交给计算技巧去运行 :C语言,java c# 解释型:边解释边执行 5.只有列表才能reverse 字符串需要索引[::-1] 6.py2 ...

  7. VS调试

    1.调试输出变量值 F9先设置断点,开始调试后,依次选择调试——>窗口——>局部变量和监视——>监视1. 点击“全部中断”——>之后局部变量会显示相关变量值,监视1可以查看变量 ...

  8. luoguP2882Face The Right Way

    https://www.luogu.org/problem/P2882 题意 你有n头牛,每头牛有个朝向,你每次可以选择连续k头牛翻转,求k为多少时可以用最少的步骤将所有牛朝向变为正向 n≤5000 ...

  9. uiautomator 安装和升级

    1.打开uiautomator sdk安装路径 < tools < uiautomatorviewer.bat # 双击点开 2.升级uiautomator包 1.uiautomatorv ...

  10. day9_7.9 函数的定义

    一.基础 1.什么是函数? 函数就是工具,方便开发人员开发软件,非常简洁的工具. 函数的关键字是def 在函数的编写阶段,只检验其语法是否正确,不检验代码. 在函数的调用阶段,可以通过函数名+()来调 ...