当前位置: 首页 > news >正文

Java 进阶 -- 流

Java I/O, NIO, and NIO.2

BaseStream<T, S extends BaseStream<T, S>> extends AutoCloseable

流(streams)的基本接口,流是支持顺序和并行聚合操作的元素序列。下面的例子演示了一个使用流类型streamIntStream的聚合操作,计算红色小部件的权重之和:

  int sum = widgets.stream().filter(w -> w.getColor() == RED).mapToInt(w -> w.getWeight()).sum();

请参阅Stream的类文档和java.util.stream的包文档,了解有关流、流操作、流管道和并行性的其他规范,这些规范管理所有流类型的行为。

public interface BaseStream<T, S extends BaseStream<T, S>> extends AutoCloseable {// 返回此流元素的迭代器。// 这是一个最终操作。Iterator<T> iterator();// 返回此流元素的 spliterator。Spliterator<T> spliterator();// 如果要执行最终操作,返回此流是否并行执行。在调用最终流操作方法后调用此方法可能会// 产生不可预测的结果。boolean isParallel();// 返回等效的顺序流。可能返回自身,因为流已经是顺序的,或者因为底层流状态被修改为顺序的。// 这是一个中间操作。S sequential();S parallel();S unordered();// 返回具有附加关闭处理程序的等效流。关闭处理程序在流上调用Close()方法时运行,并按照添加的顺序执行。// 所有关闭处理程序都将运行,即使先前的关闭处理程序抛出异常。如果任何close处理程序抛出异常,则抛出的第// 一个异常将被传递给close()的调用者,剩余的任何异常都将作为抑制异常添加到该异常中(除非剩余异常中的一// 个与第一个异常相同,因为异常无法抑制自身)。可以返回自己。S onClose(Runnable closeHandler);void close();
}

AutoCloseable

一个对象,它可以保存资源(如文件句柄或套接字句柄),直到它被关闭AutoCloseable对象的close()方法在退出一个在资源规范头文件中声明了该对象的try-with-resources块时自动调用。这种构造确保了及时释放,避免了资源耗尽异常和可能发生的错误。

public interface AutoCloseable {// 关闭此资源,放弃所有底层资源。此方法在由try-with-resources语句管理的对象上自动调用。void close() throws Exception;
}

Stream<T>

public interface Stream<T> extends BaseStream<T, Stream<T>> {// 返回由此流中与给定谓词匹配的元素组成的流。// 这是一个中间操作。Stream<T> filter(Predicate<? super T> predicate);// 返回由将给定函数应用于此流的元素的结果组成的流。// 这是一个中间操作。<R> Stream<R> map(Function<? super T, ? extends R> mapper);// 返回一个IntStream,由将给定函数应用于此流的元素的结果组成。// 这是一个中间操作。IntStream mapToInt(ToIntFunction<? super T> mapper);LongStream mapToLong(ToLongFunction<? super T> mapper);DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper);// 返回一个流,其中包含将此流的每个元素替换为通过对每个元// 素应用所提供的映射函数生成的映射流的内容的结果。每个映// 射流在其内容被放入该流之后是{@link // java.util.stream.BaseStream#close()} 关闭。(如果// 映射流是{@code null},则使用空流。)// 这是一个中间操作。// {@code flatMap()}操作的效果是对流中的元素应用一对多// 转换,然后将生成的元素扁平化到一个新的流中。<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper);LongStream flatMapToLong(Function<? super T, ? extends LongStream> mapper);DoubleStream flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper);// 返回由该流的不同元素组成的流(根据Object.equals(Object))。// 对于有序流,不同元素的选择是稳定的(对于重复元素,保留// 在遇到顺序中首先出现的元素)。对于无序流,没有稳定性保证。// 这是一个有状态的中间操作。Stream<T> distinct();// 返回由此流的元素组成的流,按自然顺序排序。如果此流的元// 素不具有可比性,则在执行终端操作时可能会抛出java.lang.ClassCastException。// 对于有序流,排序是稳定的。对于无序流,没有稳定性保证。// 这是一个有状态的中间操作。Stream<T> sorted();// 返回由此流的元素组成的流,根据提供的比较器排序。Stream<T> sorted(Comparator<? super T> comparator);// 返回由此流的元素组成的流,并在从结果流中消费元素时对每// 个元素执行所提供的操作。// 这是一个中间操作。Stream<T> peek(Consumer<? super T> action);// 返回一个元素为指定值的有序流。public static<T> Stream<T> of(T... values) {return Arrays.stream(values);}// 使用提供的恒等值和关联累加函数对该流的元素执行约简,并// 返回约简后的值。这相当于:T result = identity;for (T element : this stream)result = accumulator.apply(result, element)return result;// 但不受顺序执行的约束。// 恒等值必须是累加器函数的标识。这意味着对于所有t,// accumulator.apply(identity, t)与t相等。累加器函数必须是关联函数。// 这是一个最终操作。T reduce(T identity, BinaryOperator<T> accumulator);// 对该流的元素执行可变归纳操作。可变归纳是指被归纳简后的值// 是一个可变的结果容器,如ArrayList,通过更新结果的状态// 而不是替换结果来合并元素。这产生的结果相当于:R result = supplier.get();   for (T element : this stream)accumulator.accept(result, element);   return result;// 与`reduce(Object, BinaryOperator)`类似,collect操作可以// 并行化,而不需要额外的同步。// 这是一个最终操作。<R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner);// 使用Collector对此流的元素执行可变归纳操作。Collector封装// 了用作collect(Supplier, BiConsumer, BiConsumer)参数的函数,// 允许重用收集策略和组合收集操作(如多级分组或分区)。//如果流是并行的,而收集器是并发的,并且流是无序的,或者// 收集器是无序的,那么将执行并发归纳(有关并发归纳的详细// 信息,请参阅Collector)。// 这是一个最终操作。<R, A> R collect(Collector<? super T, A, R> collector);
}

IntStream

public interface IntStream extends BaseStream<Integer, IntStream> {// 返回一个OptionalDouble,描述此流中元素的算术平均值,如果此流为空,// 则返回一个空可选值。这是约简的一个特例。// 这是一个最终操作。OptionalDouble average();// 返回此流中元素的总和。这是一个简化的特殊情况,相当于:// return reduce(0, Integer::sum);int sum();
}

OptionalDouble

可以包含也可以不包含双精度(double)值的容器对象。如果存在一个值,isPresent()将返回true, getAsDouble()将返回该值。

提供了依赖于包含值是否存在的其他方法,例如orElse()(如果值不存在则返回默认值)和ifPresent()(如果值存在则执行代码块)。

这是一个基于值的类;在OptionalDouble实例上使用标识敏感操作(包括引用相等(==)、身份哈希码或同步)可能会产生不可预测的结果,应该避免。

public final class OptionalDouble {}

Collectors

Collector的实现,实现各种有用的归纳操作,例如将元素累积到集合中,根据各种标准汇总元素等。

public final class Collectors {// 通过在累加前对每个输入元素应用映射函数,将一个接受U类// 型元素的Collector适配为一个接受T类型元素的Collector。Collector<T, ?, R> mapping(Function<? super T, ? extends U> mapper,Collector<? super U, A, R> downstream) {}// 返回一个Collector,在指定的mapping函数和BinaryOperator// 下对其输入元素进行约简。这是reducing(Object, BinaryOperator) 的泛化,// 它允许在reduce之前对元素进行转换。public static <T, U>Collector<T, ?, U> reducing(U identity,Function<? super T, ? extends U> mapper,BinaryOperator<U> op){}// 返回一个Collector,该Collector使用提供的标识在指定的// BinaryOperator下执行输入元素的约简。public static <T> Collector<T, ?, T>reducing(T identity, BinaryOperator<T> op) {}// 返回一个Collector,该Collector对类型为T的输入元素执// 行级联“group by”操作,根据分类函数对元素进行分组,然// 后使用指定的下游Collector对与给定键相关的值执行归纳操// 作。Collector 生成的 Map 是用提供的工厂函数创建的。// 分类函数将元素映射到某个键类型K。下游收集器对类型T的元// 素进行操作,并产生类型D的结果。结果收集器生成一个Map。public static <T, K, D, A, M extends Map<K, D>>Collector<T, ?, M> groupingBy(Function<? super T, ? extends K> classifier,Supplier<M> mapFactory,Collector<? super T, A, D> downstream) {}public static <T, K> Collector<T, ?, Map<K, List<T>>>      groupingBy(Function<? super T, ? extends K> classifier) {}public static <T, K, A, D>Collector<T, ?, Map<K, D>> groupingBy(Function<? super T, ? extends K> classifier,Collector<? super T, A, D> downstream) {}}

Collector<T, A, R>

public interface Collector<T, A, R> {// 创建并返回一个新的可变结果容器的函数。Supplier<A> supplier();// 将值折叠到可变结果容器中的函数。BiConsumer<A, T> accumulator();// 一个接受两个部分结果并合并它们的函数。组合函数可以将一// 个参数的状态折叠到另一个参数中并返回,也可以返回一个新// 的结果容器。BinaryOperator<A> combiner();// 执行从中间累积类型A到最终结果类型R的最终转换。Function<A, R> finisher();// 返回Collector.Characteristics 的Set 表明此收集器的特性。// 这个集合应该是不可变的。Set<Characteristics> characteristics();// 指示收集器属性的特征,可用于优化归纳实现。enum Characteristics {// 指示此收集器是并发的,这意味着结果容器可以支持从多// 个线程并发地使用相同的结果容器调用累加器函数。// 如果CONCURRENT collector也不是UNORDERED的,那么只有// 在应用于无序数据源时才应该并发地对其进行评估。CONCURRENT,// 指示集合操作不承诺保留输入元素的相遇顺序。(如果结// 果容器没有内在顺序,例如Set,则可能是这样。)UNORDERED,// 表示结束函数是恒等函数,可以省略。如果设置,则从A// 到R的未检查强制转换必须成功。IDENTITY_FINISH}
}

相关文章:

Java 进阶 -- 流

Java I/O, NIO, and NIO.2 BaseStream<T, S extends BaseStream<T, S>> extends AutoCloseable 流(streams)的基本接口&#xff0c;流是支持顺序和并行聚合操作的元素序列。下面的例子演示了一个使用流类型stream和IntStream的聚合操作&#xff0c;计算红色小部件…...

硬件 TCP/IP 协议栈

目录 全硬件的TCP/IP 协议栈简介以太网接入单片机方案以太网接口芯片CH395Q 简介以太网接口芯片CH395Q 命令简介以太网接口芯片CH395Q 寄存器配置与使用移植CH395Q 源码 TCP_Client 实验TCPClient 配置流程TCPClient 实验硬件设计程序设计下载验证 WebServer 实验WebServer 简介…...

word恢复和粘贴按钮变灰色,不可用怎么办?

如果 Word 中的恢复和粘贴按钮变成灰色&#xff0c;可能是由于以下原因之一&#xff1a; 1. 文档处于只读模式。 2. 与 Office 相关的某些组件已损坏或缺失。 3. Word 的文件权限被配置为只读。 以下是一些可能的解决方法&#xff1a; 1. 检查文档是否处于只读模式。 如果是…...

【unity技巧】Physics2D Raycast、Overlapcircle、OverlapBox检测的用法

文章目录 分析检测地面1. 使用Raycast1.1 介绍1.3 场景窗口可视化1.4 完整实例代码1.4 存在问题1.4.1 问题11.4.2 问题2 2. 使用Overlapcircle2.1 介绍2.2 场景窗口可视化2.3 完整实例代码2.4 存在问题 3. 使用OverlapBox3.1 介绍3.2 场景窗口可视化3.3 完整实例代码3.4 注意事…...

一、kafka入门

Kafka入门 为什么要用消息中间件&#xff1f; 异步处理 场景说明&#xff1a;用户注册后&#xff0c;需要发注册邮件和注册短信。传统的做法有两种1.串行的方式&#xff1b;2.并行方式。 串行方式&#xff1a;将注册信息写入数据库成功后&#xff0c;发送注册邮件&#xff…...

公司新来一00后,真让人崩溃...

2022年已经结束结束了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备今年的金九银十的面试计划。 在此展示一套学习笔记 / 面试手册&#xff0c;年后跳槽的朋友可以好好刷一刷&#xff0c;还是挺有必要的&#xff0c;它几乎涵盖了所有的…...

(1Gb)S28HS01GTGZBHA030/ S28HS01GTGZBHV033/ S28HS01GTGZBHA033 FLASH - NOR闪存器件

产品简介&#xff1a; Infineon 带有HyperBus™的S26HSxT以及S26HLxT Semper™闪存是一种高性能、安全可靠的NOR闪存解决方案。 这些组件集成了关键的安全功能&#xff0c;用于汽车、工业、通信等行业的各种应用。S26HSxT和S26HLxT Semper闪存采用HyperBus接口&#xff0c;符…...

苹果服务端通知v2处理(AppStore Server Notifications V2)

苹果服务端通知v2处理 关键词: App Store Server Notifications V2、Python源码、苹果订阅、JWS、x5c、JSON WEB TOKEN 背景 最近要接入苹果订阅功能&#xff0c;调研后发现订阅生命周期内的状态变更是通过苹果服务端通知返回的(什么时候普通内购也能加上减少掉单的概率)&am…...

matlab 道路点云路缘石边界提取

目录 一、功能概述1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、参考链接一、功能概述 1、算法概述 1、对于扫描线上的每个点,该函数计算这三个特征。 高差特征——计算一个点周围的标准偏差和高度最大差。路缘石点的标准偏差和高度差必须分别在指定的Heig…...

二叉树详解:带你掌握二叉树

目录 前言1. 树型结构1. 1 树的概念1.2 树的特点1.3 树的相关术语 2. 二叉树&#xff08;binary tree&#xff09;2.1 二叉树的概念2.2 二叉树中的特殊树2.2.1 满二叉树2.2.2 完全二叉树 2.3 二叉树的性质 3. 二叉树的遍历3.1 前序遍历3.2 中序遍历3.3 后序遍历3.4 层序遍历 总…...

LNMP网站框架搭建(编译安装)

目录 一、Nginx的工作原理 工作进程&#xff1a; 二、Nginx编译安装安装 三、mysql的编译安装 四、php的编译安装 验证PHP与nginx的是否连接 验证lnmp的是否搭建成功 五、部署 Discuz&#xff01;社区论坛 一、Nginx的工作原理 php-fpm.conf 是控制php-fpm守护…...

详解Servlet API

目录 前言 HttpServlet HttpServletRequest 代码实例 打印请求信息 通过URL中的queryString进行传递。 通过post请求的body&#xff0c;使用form表单传递 通过POST 请求中的 body 按照 JSON 的格式进行传递 HttpServletResponse 核心方法代码实例 设置状态码 自动刷…...

【小白教程】Docker安装使用教程,以及常用命令!

【小白教程】Docker安装使用教程&#xff0c;以及常用命令&#xff01; - 带你薅羊毛最近调试Docker内容&#xff0c;顺手记录一下&#xff0c;我常用的几个命令&#xff01;这里总结一下&#xff0c;方便自己也同时方便大家使用&#xff01; 内容慢慢完善更新&#xff01;如有…...

TypeScript基础

TS编译运行 ts不是在终端运行&#xff0c;是一门中间语言&#xff0c;最终编译为js运行。 手动编译 // 1. ts编译为js npm i -g typescript // 查看版本 tsc -v// 2. ts直接运行&#xff0c;主要用来查看是否报错 npm i -g ts-node // 查看版本 ts-node -v1.手动编译ts代码 …...

QML学习二:Doxygen为qml工程生成代码文档

效果如下: 设置后能够支持.js和.qml文档。 QML学习二:Doxygen为工程生成注释文档 前言一、安装doxyqml二、Doxygen设置1.文档目录设置2.文档目录设置三、添加注释总结前言 好的代码必须配一个好的文档说明,方便以后维护以及学习。 前提条件: 1.安装好了Doxygen代码生成工…...

Vue 有哪些经典面试题?

前言 下面总结了vue的一些经典的面试题&#xff0c;希望对正在找工作面试的小伙伴们提供一些帮助&#xff0c;我们废话少说直接进入整体、 简述一下什么是MVVM模型 MVVM&#xff0c;是Model-View-ViewModel的简写&#xff0c;其本质是MVC模型的升级版。其中 Model 代表数据模…...

pandas速学-DataFrame

一、理解DataFrame 他是一个表格结构&#xff1a;DataFrame 是一个表格型的数据结构 他是有序的&#xff0c;不同值类型&#xff1a;它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。 他可以被看做一个由series组成的…...

在任务与执行策略之间的隐性耦合

我们已经知道&#xff0c; Executor 框架可以将任务的提交与任务的执行策略解耦开来。就像许多对复杂过程的解耦操作那样&#xff0c;这种论断多少有些言过其实了。虽然Executor 框架为制定和修改执行策略都提供了相当大的灵活性&#xff0c;但并非所有的任务都能适用所有的执行…...

Spring Cloud Alibaba Nacos 构建配置中心

构建配置中心 新建命名空间 登录 Nacos 面板&#xff0c;依次点击左侧菜单栏【命名空间→新建命名空间】、填写命名空间名和描述信息&#xff0c;点击【确定】&#xff1a; 新建配置文件 依次点击左侧菜单栏【配置管理→配置列表】、切换到指定命名空间【此处为 shop】、点击…...

华为OD机试真题 Java 实现【猴子爬山】【2023 B卷 100分】,附详细解题思路

一、题目描述 一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯: 每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式? 二、输入描述 输入只有一个整数N(0<N<=50)此阶梯有多少个阶梯。 三、输出描述 输…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...