写写stream流的终结操作
终结操作和中间操作的区别:中间操作返回的一直都是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流的终结操作的更多相关文章
- Java8 Stream流API常用操作
Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...
- Stream流的这些操作,你得知道,对你工作有很大帮助
Stream流 Stream(流)是一个来自数据源的元素队列并支持聚合操作: 元素是特定类型的对象,形成一个队列. Java中的Stream并不会存储元素,而 是按需计算. 数据源 流的来源. 可以是 ...
- 【JDK8】Java8 Stream流API常用操作
Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...
- 总算给女盆友讲明白了,如何使用stream流的filter()操作
一.引言 在上一篇文章中<这么简单,还不会使用java8 stream流的map()方法吗?>分享了使用stream的map()方法,不知道小伙伴还有印象吗,先来回顾下要点,map()方法 ...
- java中Optional和Stream流的部分操作
package test9; import java.util.DoubleSummaryStatistics; import java.util.Optional; import java.util ...
- Java 基础-IO、stream 流、文件操作
输入输出流的分类 在 java.io 包中,包含了输入输出操作所需的类. I/O 流可以安装不同的标准分类: 按照流的方向分类: 输入流:将信息从代码外部输入代码 输出流:将代码得到的数据输出到文件. ...
- 还看不懂同事的代码?超强的 Stream 流操作姿势还不学习一下
Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda ...
- 超强的Lambda Stream流操作
原文:https://www.cnblogs.com/niumoo/p/11880172.html 在使用 Stream 流操作之前你应该先了解 Lambda 相关知识,如果还不了解,可以参考之前文章 ...
- java8 新特性Stream流的应用
作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8 stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...
- 30.Stream流
5.Stream流 5.1体验Stream流[理解] 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集 ...
随机推荐
- c#动态执行脚本的3种方式详解
1.使用Roslyn编译器 2.使用IronPython或IronRuby 3.使用JavaScript引擎 在C#中,可以使用一些第三方库或内置类库实现动态执行脚本的功能.以下是几个常用的方案: 1 ...
- 视觉族: 基于Stable Diffusion的免费AI绘画图片生成器工具
视觉族是一款基于Stable Diffusion文生图模型的免费在线AI绘画图片生成器工具,可以使用提示关键词快速生成精美的艺术图片,支持中文提示.无论你是想要创作自己的原创作品,还是想要为你的文字增 ...
- this,构造器,static,final,单例模式
this关键字 在java中this是一个引用变量,即指向当前对象地址的引用(指针),→可以把this当作当前对象,便于更好的索引. this() 实际是调用了当前对象的构造器 1. 引用当前对象的属 ...
- C++笔记(4)友元
通常情况下,公有类方法是访问类对象私有部分的唯一途径.除此之外,C++还提供了另外一种形式的访问权限:友元. 友元有三种: 友元函数 友元类 友元成员函数 通过让函数成为类的友元,可以赋予该函数与类的 ...
- 安装配置intelli IDEA
效果 操作 去官网下载安装包 下载 Intelli IDEA 下载插件 插件下载 打开IDEA安装目录下的bin目录,找到idea64.exe.vmoptions配置文件 添加配置 打开indea,添 ...
- undefined,null 和 undeclared 有什么区别?
a.null表示"没有对象",即该处不应该有值,转为数值时为0.典型用法是:作为函数的参数,表示该函数的参数不是对象.作 为对象原型链的终点. b.undefined表 ...
- Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算
Java设计模式-责任链模式,应用接口多个参数验证,订单多个费用的计算 1.定义请求和返回对象的上下文对象 package com.example.core.mydemo.java.filter; i ...
- uniapp ios推送 离线推送收不到消息
突然之间收不到离线推送消息了,角标也不显示了. 查了很长时间发现是ios的推送证书过期了. 我用的是appuploader登陆上以后在证书管理中新创建证书就可以了.
- xshell+ssh+网络+加密
使用xshell+ssh用于管理linux服务器,大概是目前最为流行的方式. 这个工具和技术涉及到: 计算机网络 加密解密 虽然不是专门的系统工程师,但还是相对频繁使用这套工具,有时候难免遇到一些不知 ...
- Linux 中内核与应用程序的交互方式:netlink
netlink介绍 一般来说用户空间和内核空间的通信方式有很多种,而Netlink可以实现双工通信. Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应 ...