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

Java lambda表达式如何自定义一个toList Collector

匿名类:

package l8;import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
import java.util.stream.Collectors;public class CollectorToList2 {public static void main(String[] args) {/***<T> – the type of input elements to the reduction operation<A> – the mutable accumulation type of the reduction operation (often hidden as an implementation detail)<R> – the result type of the reduction operation  最终返回结果的类型*/Collector<Integer, List<Integer>, List<String>> toList = new Collector<Integer, List<Integer>, List<String>>() {// 初始一个容器,用于做为累加的容器@Overridepublic Supplier<List<Integer>> supplier() {return () -> new ArrayList<>();}/*** 元素累加* @return*/@Overridepublic BiConsumer<List<Integer>, Integer> accumulator() {return List::add;}/*** 将多个容器进行合并(应该是在并行Stream时使用的)* @return*/@Overridepublic BinaryOperator<List<Integer>> combiner() {return (a, b) -> {System.out.println("combiner call");a.addAll(b);return a;};}/*** 最终类型转换* @return*/@Overridepublic Function<List<Integer>, List<String>> finisher() {return list -> list.stream().map(e -> e + "").collect(Collectors.toList());}@Overridepublic Set<Characteristics> characteristics() {return Collections.singleton(Characteristics.UNORDERED);}};List<String> collect = Arrays.asList(1, 2, 3).stream().collect(toList);System.out.println(collect);collect = Arrays.asList(1, 2, 3).parallelStream().collect(toList);System.out.println(collect);}
}
javascript:void(0)

Combiner:

应用:

优化初始容器的容量:


/*** <T> – the type of input elements to the reduction operation* <A> – the mutable accumulation type of the reduction operation (often hidden as an implementation detail)* <R> – the result type of the reduction operation  最终返回结果的类型*/
class ToListWithInitialCapacity implements Collector<Integer, List<Integer>, List<String>> {private int initialCapacity;public ToListWithInitialCapacity(int initialCapacity) {this.initialCapacity = initialCapacity;}// 初始一个容器,用于做为累加的容器@Overridepublic Supplier<List<Integer>> supplier() {return () -> new ArrayList<>(initialCapacity);}/*** 元素累加** @return*/@Overridepublic BiConsumer<List<Integer>, Integer> accumulator() {return List::add;}/*** 将多个容器进行合并(应该是在并行Stream时使用的)** @return*/@Overridepublic BinaryOperator<List<Integer>> combiner() {return (a, b) -> {System.out.println("combiner call");a.addAll(b);return a;};}/*** 最终类型转换** @return*/@Overridepublic Function<List<Integer>, List<String>> finisher() {return list -> list.stream().map(e -> e + "").collect(Collectors.toList());}@Overridepublic Set<Characteristics> characteristics() {return Collections.singleton(Characteristics.UNORDERED);}
}

Jdk toList默认实现:

    /*** Returns a {@code Collector} that accumulates the input elements into a* new {@code List}. There are no guarantees on the type, mutability,* serializability, or thread-safety of the {@code List} returned; if more* control over the returned {@code List} is required, use {@link #toCollection(Supplier)}.** @param <T> the type of the input elements* @return a {@code Collector} which collects all the input elements into a* {@code List}, in encounter order*/public static <T>Collector<T, ?, List<T>> toList() {return new CollectorImpl<>(ArrayList::new, List::add,(left, right) -> { left.addAll(right); return left; },CH_ID);}

相关文章:

Java lambda表达式如何自定义一个toList Collector

匿名类&#xff1a; package l8;import java.util.*; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collector; import java.util.s…...

【hcie-cloud】【18】华为云Stack灾备服务介绍【容灾解决方案介绍、灾备方案架构介绍、管理组件灾备方案介绍、高阶云服务容灾简介、缩略词】【下】

文章目录 灾备方案概述、备份解决方案介绍容灾解决方案介绍华为云容灾解决方案概览云容灾服务云硬盘高可用服务 (VHA)VHA组网结构VHA逻辑组网架构VHA管理组件介绍VHA服务实现原理云服务器高可用服务&#xff08;CSHA&#xff09;CSHA物理组网架构CSHA逻辑组网架构CSHA服务组件间…...

linux建立软链接——以matlab为例

如果软件没有建立软连接&#xff0c;每次打开terminal就只是个黑黑的窗口&#xff0c;每次打开软件都要自己load一次&#xff0c;比较麻烦。 第一步&#xff1a; 在工作夹新建文档&#xff1a;project.cshrc 第二步&#xff1a; 在夹新建文档中写入&#xff1a;module laod m…...

ubuntu20固定串口名称

查看串口的详细信息 udevadm info --name/dev/ttyUSB0结果&#xff1a; P: /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0 N: ttyUSB0 L: 0 S: serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UAR…...

扩散模型(二)——DDIM学习笔记-大白话推导

扩散模型系列&#xff1a; &#xff08;1&#xff09;扩散模型(一)——DDPM推导笔记-大白话推导 &#xff08;2&#xff09;扩散模型(二)——DDIM学习笔记-大白话推导 请提前关注&#xff0c;后续待更新&#xff0c;谢谢… 写在前面&#xff1a; &#xff08;1&#xff09;建议…...

【软件测试作业_TPshop商城】农业工程学院-测试需求分析与测试计划+自动化+性能+测试用例+报告软件缺陷+测试计划+单元测试+系统测试

1测试需求分析与测试计划 1.1 被测系统简介 1.2测试需求分析 1.2.1单元测试层面的测试需求分析 1.2.2系统测试层面的测试需求分析 1.3测试计划 1.31测试范围与任务 1.3.2 测试环境 1.3.3测试进度安排 测试用例的设计2 2.1单元测试层面的测试用例设计 2.2系统测试层面的测试用例…...

屏幕截图编辑工具Snagit中文

Snagit是一款优秀的屏幕、文本和视频捕获与转换程序。它能够捕获屏幕、窗口、客户区窗口、最后一个激活的窗口或用鼠标定义的区域&#xff0c;并支持BMP、PCX、TIF、GIF或JPEG格式的保存。Snagit还具有自动缩放、颜色减少、单色转换、抖动等功能&#xff0c;并能将捕获的图像转…...

12GoF之代理模式

解决问题的思维&#xff1a;AOP 解决问题技术&#xff1a;代理技术 代理技术太麻烦&#xff0c;因此使用框架 Spring AOP框架&#xff08;底层是代理技术&#xff1a;jdk动态daili&#xff0c;cglib&#xff09; 代理模式是GoF23种设计模式之一。属于结构型设计模式。 代理…...

Unity中URP下实现能量罩(扭曲流光花纹)

文章目录 前言一、能量罩花纹1、在属性面板接收能量罩花纹纹理2、申明 纹理 和 采样器3、在顶点着色器&#xff0c;应用 Tilling 和 Offset4、在片元着色器&#xff0c;纹理采样后&#xff0c;与之前的结果相乘输出 二、能量罩流光1、在顶点着色器&#xff0c;记录原uv值2、在片…...

南京银行高管上新:“70后董事长”谢宁将上任,能否及时救场?

撰稿|行星 来源|贝多财经 2024年上市银行的首例“换帅”事件&#xff0c;由南京银行拉开帷幕。 1月8日&#xff0c;南京银行&#xff08;SH:601009&#xff09;发布公告称&#xff0c;该行2024年第一次临时股东大会选举产生了第十届董事会11名董事&#xff0c;同意选举谢宁担…...

K8S容器编排基本使用

Kubernetes容器编排技术基本使用 1.部署模式发展历程 物理单机 – 虚拟机&#xff08;VMware&#xff09;-- IAAS&#xff08;基础设施即服务 比如够买jsp主机模式&#xff09;-- OPENSTACK&#xff08;多个机器分片使用思想&#xff09;-- docker&#xff08;容器化&#xf…...

PyTorch 各种池化层函数全览与用法演示

目录 torch.nn.functional子模块Pooling层详解 avg_pool1d 用法与用途 参数 注意事项 示例代码 avg_pool2d 用法与用途 参数 注意事项 示例代码 avg_pool3d 用法与用途 参数 注意事项 示例代码 max_pool1d 用法与用途 参数 注意事项 示例代码 max_pool2d…...

Redis:原理速成+项目实战——Redis实战7(优惠券秒杀+细节解决超卖、一人一单问题)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis实战6&#xff08;封装缓存工具&#xff08;高级写法&#xff09;&&缓存总…...

【刷题笔记3】

笔记3 输出小数位数控制。&#xff08;自动四舍五入&#xff0c;不够就自动补0&#xff09; double a123.456; cout<<fixed<<setprecision(2)<<a;递归题目的记录 &#xff08;1&#xff09;&#xff1a;n*m的棋盘格子&#xff08;n为横向的格子数&#xf…...

YOLOv8优化策略:轻量化改进 | 华为Ghostnet,超越谷歌MobileNet | CVPR2020

🚀🚀🚀本文改进:Ghost bottleneck为堆叠Ghost模块 ,与YOLOV8建立轻量C2f_GhostBottleneck 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.Ghostnet介绍 论文: https://arxiv.org/pdf/1911.11907.…...

格雷希尔G65系列快速接头满足汽车减震器的气压、油压测试要求

当汽车经过不平路面时&#xff0c;汽车减震器可以抑制弹簧吸震后因反弹带来的震荡和来自路面的冲击&#xff0c;为乘客带来平稳舒适的行车体验。减震器在出厂之前&#xff0c;需要模拟汽车的真实行驶环境&#xff0c;在模拟当中需要对它们进行气压和油压的轮番测试。 客户的测试…...

php中常用的几个安全函数

1. mysql_real_escape_string() 这个函数对于在PHP中防止SQL注入攻击很有帮助&#xff0c;它对特殊的字符&#xff0c;像单引号和双引号&#xff0c;加上了“反斜杠”&#xff0c;确保用户的输入在用它去查询以前已经是安全的了。但你要注意你是在连接着数据库的情况下使用这个…...

【K8S 云原生】Kurbernets集群的调度策略

目录 一、Kubernetes的list-watch机制 1、List-watch 2、创建pod的过程&#xff1a; 二、scheduler调度的过程和策略&#xff1a; 1、简介 2、预算策略&#xff1a;predicate 3、优先策略&#xff1a; 3.1、leastrequestedpriority&#xff1a; 3.2、balanceresourceal…...

vue-office 支持多种文件(docx、excel、pdf)预览的vue组件库

一、文档链接 https://gitcode.com/mirrors/501351981/vue-office/overview?utm_sourcecsdn_github_accelerator&isLogin1 二、安装 #docx文档预览组件 npm install vue-office/docx vue-demi0.13.11#excel文档预览组件 npm install vue-office/excel vue-demi0.13.11#…...

如何使用GaussDB创建脱敏策略(MASKING POLICY)

目录 一、前言 二、GaussDB中的脱敏策略 1、数据脱敏的定义 2、创建脱敏策略的语法说明 三、在GaussDB中如何创建数据脱敏策略(示例) 1、创建脱敏策略的一般步骤 2、GaussDB数据库中创建脱敏策略的完整示例 1&#xff09;开启安全策略开关&#xff0c;以初识用户omm登录…...

从嵌入式到云原生:手把手教你根据项目规模选对MQTT Broker(EMQX vs Mosquitto实战避坑)

从嵌入式到云原生&#xff1a;手把手教你根据项目规模选对MQTT Broker&#xff08;EMQX vs Mosquitto实战避坑&#xff09; 当你在设计一个物联网系统时&#xff0c;选择正确的MQTT Broker就像为你的房子选择合适的地基。选得太轻量级&#xff0c;系统可能无法承载未来的增长&…...

3步掌握WindowResizer:免费强制调整任意窗口大小的终极方案

3步掌握WindowResizer&#xff1a;免费强制调整任意窗口大小的终极方案 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的窗口尺寸而烦恼吗&#xff1f;无论你面对的…...

Next-MDX-Remote部署指南:从开发到生产环境的完整流程

Next-MDX-Remote部署指南&#xff1a;从开发到生产环境的完整流程 【免费下载链接】next-mdx-remote Load mdx content from anywhere through getStaticProps in next.js 项目地址: https://gitcode.com/gh_mirrors/ne/next-mdx-remote Next-MDX-Remote 是一款强大的 N…...

RKE2集群里crictl拉镜像总报‘device busy’?别急着重启,先排查这个安全软件

RKE2集群crictl拉镜像报"device busy"的深度排查指南 当你正在RKE2集群中执行关键部署&#xff0c;突然遇到crictl pull命令报出"failed to extract layer"和"device or resource busy"错误时&#xff0c;那种感觉就像在高速公路上突然爆胎。大多…...

终极网络工具集实战:ACL库中DNS解析、Ping检测与邮件发送的完整解决方案

终极网络工具集实战&#xff1a;ACL库中DNS解析、Ping检测与邮件发送的完整解决方案 【免费下载链接】acl A powerful server and network library, including coroutine, redis client, http, websocket, mqtt with C/C for multi-platform including Linux, Android, iOS, Ma…...

利用kimi与快马平台,十分钟搭建个人博客web应用原型

最近想快速验证一个个人博客的创意&#xff0c;但自己从头写代码太费时间。尝试用InsCode(快马)平台的Kimi模型生成原型&#xff0c;没想到十分钟就搞定了可运行的Web应用&#xff0c;分享下这个高效流程&#xff1a; 明确需求梳理结构 先花2分钟在纸上画了博客的基本框架&…...

PyTorch张量操作实战:从基础运算到CNN应用

1. PyTorch张量基础&#xff1a;从概念到创建 第一次接触PyTorch张量时&#xff0c;我完全被各种术语搞晕了。什么标量、向量、矩阵&#xff0c;还有这个奇怪的"张量"词。后来才发现&#xff0c;其实张量就是多维数组的另一种说法&#xff0c;只不过在深度学习中我们…...

春招已经过半,这一波再不动手,基本就没位置了

关注 霍格沃兹测试学院公众号&#xff0c;回复「资料」&#xff0c;领取人工智能测试开发技术合集导读3月底这个时间点&#xff0c;如果你还在纠结“要不要投”&#xff0c;那基本已经慢半拍了。现在的真实情况是&#xff1a;大厂已经进入筛选面试并行阶段一部分公司已经开始发…...

战争鼓点响起:AI生成大片感战斗音乐作品

战争鼓点响起&#xff1a;AI生成大片感战斗音乐作品 1. 从文字到战歌&#xff1a;AI音乐生成初体验 想象一下这样的场景&#xff1a;你正在制作一部史诗级的战斗短片&#xff0c;画面中千军万马奔腾&#xff0c;刀光剑影交错&#xff0c;但总觉得缺少点什么。没错&#xff0c…...

激光+视觉+IMU+RTK融合实战:如何用多传感器打造厘米级三维重建系统?

激光视觉IMURTK融合实战&#xff1a;如何用多传感器打造厘米级三维重建系统&#xff1f; 在自动驾驶和机器人领域&#xff0c;三维重建技术正经历着从实验室走向工业落地的关键转折。传统单一传感器方案已无法满足复杂场景下的精度需求&#xff0c;而多传感器融合正成为突破性能…...