终结操作和中间操作的区别:中间操作返回的一直都是stream,所以可以一直使用,但是终结操作返回的不是stream,后面不能继续操作

foreach:对流中的所有元素进行遍历操作

count:获取当前流内元素的个数//这个是无参的

max&min:这个也是需要比较器的,具体写法和sort差不多,但是返回值是Optional

collect(Collectors.toList()):把当前的流转换成集合

  collect(Collectors.toMap(a->a.getKey,a->a.getValue))  //转换成map

查找和匹配:1.anyMatch | allMatch | noneMatch,返回类型是boolean,只要有符合的就会返回true,需要一个判断条件函数做参

      2.findAny | findFirst 无参数传入,获取流中的一个元素,any没法保证获取的一定是流中的第一个元素(有随机性)

reduce归并:对流中的数据按照指定的计算方式计算出结果(缩减操作)

reduce(初始值,(结果,遍历元素)->(对结果与遍历元素进行操作))

两个元素

使用提供的标识值和关联累积函数对此流的元素执行缩减,并返回缩减值。这相当于:
int result = identity; for (int element : this stream) result = accumulator.applyAsInt(result, element) return result;
但不受顺序执行的约束。
该 identity 值必须是累加器函数的标识。这意味着对于所有人来说 x, accumulator.apply(identity, x) 都是平等 x的。该 accumulator 函数必须是 关联 函数。
这是一个 终端操作。
参数:
identity – 累加函数的恒等值 op– 用于组合两个值的关联、非干扰、无状态函数
返回:
减少的结果

一个元素(通过文档可知,这里就是把要遍历的第一个元素设置为结果)

使用关联累积函数对此流的元素执行缩减,并返回OptionalInt描述缩减值(如果有)。这相当于:
boolean foundAny = false;
int result = null;
for (int element : this stream) {
if (!foundAny) {
foundAny = true;
result = element;
}
else
result = accumulator.applyAsInt(result, element);
}
return foundAny ? OptionalInt.of(result) : OptionalInt.empty();
但不受顺序执行的约束。
该 accumulator 函数必须是 关联 函数。
这是一个 终端操作。
参数:
op– 用于组合两个值的关联、非干扰、无状态函数
返回:
减少的结果

stream总结:

1.惰性求值(如果只有中间操作没有终结操作所有操作都不会进行)

2.流是一次性的(流使用完之后就会报废,不可以重复使用)

3.不会影响原数据(正常情况下stream操作不会对原数据产生修改)

写一下学习中遇到的一些有趣的问题

        int[] arr = {1, 2, 3, 4, 5, 6};
int reduce = Arrays.stream(arr).reduce(0, (int1, int2) -> int1<int2?int1:int2);
int reduce1 = Arrays.stream(arr).reduce(0, (int1, int2) -> Math.min(int1, int2));
int reduce2 = Arrays.stream(arr).reduce(0, Math::min)

我根据idea的提示从0->1->2一步一步简写判断语句

Intger类有里就有最值

        int minValue = Integer.MIN_VALUE;
int maxValue = Integer.MAX_VALUE;

写写stream流的终结操作的更多相关文章

  1. Java8 Stream流API常用操作

    Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...

  2. Stream流的这些操作,你得知道,对你工作有很大帮助

    Stream流 Stream(流)是一个来自数据源的元素队列并支持聚合操作: 元素是特定类型的对象,形成一个队列. Java中的Stream并不会存储元素,而 是按需计算. 数据源 流的来源. 可以是 ...

  3. 【JDK8】Java8 Stream流API常用操作

    Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...

  4. 总算给女盆友讲明白了,如何使用stream流的filter()操作

    一.引言 在上一篇文章中<这么简单,还不会使用java8 stream流的map()方法吗?>分享了使用stream的map()方法,不知道小伙伴还有印象吗,先来回顾下要点,map()方法 ...

  5. java中Optional和Stream流的部分操作

    package test9; import java.util.DoubleSummaryStatistics; import java.util.Optional; import java.util ...

  6. Java 基础-IO、stream 流、文件操作

    输入输出流的分类 在 java.io 包中,包含了输入输出操作所需的类. I/O 流可以安装不同的标准分类: 按照流的方向分类: 输入流:将信息从代码外部输入代码 输出流:将代码得到的数据输出到文件. ...

  7. 还看不懂同事的代码?超强的 Stream 流操作姿势还不学习一下

    Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda ...

  8. 超强的Lambda Stream流操作

    原文:https://www.cnblogs.com/niumoo/p/11880172.html 在使用 Stream 流操作之前你应该先了解 Lambda 相关知识,如果还不了解,可以参考之前文章 ...

  9. java8 新特性Stream流的应用

    作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8  stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...

  10. 30.Stream流

    5.Stream流 5.1体验Stream流[理解] 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集 ...

随机推荐

  1. 005. gitlab安装

    1. gitlab介绍 官方网站: www.gitlab.com gitlab是一款使用ruby编写的代码版本管理系统,他可以通过web界面来管理代码. 2. gitlab安装 官方安装文档: htt ...

  2. Linux网络驱动

    1 简介 1.1 硬件说明 嵌入式网络硬件分为:MAC和PHY.MAC一般时SOC内置,PHY是外部器件. (1)SOC内部没有MAC 如果SOC内部没有网络MAC外设,可使用外置的MAC,一般外置的 ...

  3. map和解构赋值的拷贝

    map遍历之后返回的数组是深拷贝,解构赋值一维的是深拷贝,二维是浅拷贝

  4. 在webpack中运行vue

    网址:https://vue-loader.vuejs.org/zh/ Vue Loader 是一个 webpack 的 loader,它允许你以一种名为单文件组件的格式撰写 Vue 组件 安装loa ...

  5. CSP-S2023 题解

    CSP-S 2023 题解 密码锁 发现总状态数只有 \(10^5\) 个,枚举 \(O(n)\) 暴力判断即可,复杂度 \(O(10^5 n)\). 或者每一个状态只对应了 \(81\) 个状态,枚 ...

  6. .net core (.net6) 读取配置文件 appsettings.json

    .net core (.net6) 读取配置文件 appsettings.json 新建个工具类,方便其它地方使用,代码如下 AppHelper: namespace net6mvc.Utils { ...

  7. springmvc组件说明

    DispatcherServlet:前端控制器,也称为中央控制器,它是整个请求响应的控制中心,组件的调用由它统一调度. HandlerMapping:处理器映射器,它根据用户访问的 URL 映射到对应 ...

  8. OpenCV + sklearnSVM 实现手写数字分割和识别

    这学期机器学习考核方式以大作业的形式进行考核,而且只能使用一些传统的机器学习算法. 综合再三,选择了自己比较熟悉的MNIST数据集以及OpenCV来完成手写数字的分割和识别作为大作业. 1. 数据集准 ...

  9. Python使用Matplotlib画以日期为X轴的图

    Python使用Matplotlib画以日期为X轴的图 步骤: 用pd把字符串格式的日期转成date格式. 使用 AutoDateLocator 设置x轴的属性. 1 from matplotlib ...

  10. Xilinx-HDF的文件内容

    Xilinx-HDF文件 原文:分享:HDF文件的更多用途 Xilnx Vivado能导出HDF文件,给Xilnx SDK创建软件工程.HDF文件的还可以有更多用途. HDF文件是一个zip文件,可以 ...