Collectors.reducing总结Collectors.mapping+Collectors.reducing+TreeSet等等

Collectors.reducing总结

1. 方法签名 一个参数

public static <T> Collector<T, ?, Optional<T>> reducing(BinaryOperator<T> op)

参数说明

  • BinaryOperator op 归集操作函数 输入参数T返回T

测试代码

我们这里实现一个简单的求和功能,代码如下

    @Testpublic void testReducingOne() {List<Integer> testData = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);Optional<Integer> sum = testData.stream().collect(Collectors.reducing((prev, cur) -> {System.out.println("prev=>" + prev + "cur=>" + cur);return prev + cur;}));System.out.print(sum.get()); // 45 }

2. 方法签名 两个参数

public static <T> Collector<T, ?, T> reducing(T identity, BinaryOperator<T> op)

参数说明

  • T identity 返回类型T初始值
  • BinaryOperator op 归集操作函数 输入参数T返回T

测试代码

我们这里实现一个简单的求和并加上20功能,代码如下

    @Testpublic void testReducingTwo() {List<Integer> testData = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);Integer sum = testData.stream().collect(Collectors.reducing(20, (prev, cur) -> {System.out.println("prev=>" + prev + "cur=>" + cur);return prev + cur;}));System.out.print(sum); //65}

2. 方法签名 三个参数

public static <T, U> Collector<T, ?, U> reducing(U identity,Function<? super T, ? extends U> mapper,BinaryOperator<U> op)

这个函数才是真正体现reducing(归集)的过程。调用者要明确知道以下三个点

  1. 需要转换类型的初始值
  2. 类型如何转换
  3. 如何收集返回值

参数说明

  • U identity 最终返回类型U初始值
  • Function<? super T, ? extends U> mapper 将输入参数T转换成返回类型U的函数
  • BinaryOperator<U> op 归集操作函数 输入参数U返回U

测试代码

我们这里实现一个简单数字转字符串并按逗号连接的功能,代码如下

    @Testpublic void testReducingThree() {List<Integer> testData = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);String joinStr = testData.stream().collect(Collectors.reducing("转换成字符串", in -> {return in + "";}, (perv, cur) -> {return perv + "," + cur;}));System.out.print(joinStr); // 转换成字符串,1,2,3,4,5,6,7,8,9}



Collectors.mapping+Collectors.reducing+TreeSet等等

	@Testpublic void demo9(){// 求最大值 3List<Integer> list = Arrays.asList(1, 2, 3);Integer maxValue = list.stream().collect(Collectors.collectingAndThen(Collectors.maxBy((a, b) -> a - b), Optional::get));System.out.println("最大值:"+maxValue);// 最小值 1Integer minValue = list.stream().collect(Collectors.collectingAndThen(Collectors.minBy((a, b) -> a - b), Optional::get));System.out.println("最小值:"+minValue);// 求和 6Integer sumValue = list.stream().collect(Collectors.summingInt(item -> item));System.out.println("求和:"+sumValue);// 平均值 2.0Double avg = list.stream().collect(Collectors.averagingDouble(x -> x));System.out.println("平均值:"+avg);// 映射:先对集合中的元素进行映射,然后再对映射的结果使用Collectors操作// A,B,CSystem.out.println("大写:"+Stream.of("a", "b", "c").collect(Collectors.mapping(x -> x.toUpperCase(), Collectors.joining(","))));// sum: 是每次累计计算的结果,b是Function的结果System.out.println("return:"+Stream.of(1, 3, 4).collect(Collectors.reducing(0, x -> x + 1, (sum, b) -> {System.out.println("sum:"+sum + "->b:" + b);return sum + b;})));// 注意reducing可以用于更复杂的累计计算,加减乘除或者更复杂的操作// result = 2 * 4 * 5 = 40System.out.println("return:"+Stream.of(1, 3, 4).collect(Collectors.reducing(1, x -> x + 1, (result, b) -> {System.out.println("result:"+result + "->b:" + b);return result * b;})));// Collectors.joining(",")的结果是:a,b,c  然后再将结果 x + "d"操作, 最终返回a,b,cdString str= Stream.of("a", "b", "c").collect(Collectors.collectingAndThen(Collectors.joining(","), x -> x + "d"));System.out.println("str: "+str);List<Integer> list1 = Arrays.asList(1, 2, 3);// [10, 20, 30]List<Integer> collect = list1.stream().map(i -> i * 10).collect(Collectors.toList());// [20, 10, 30]Set<Integer> collect1 = list1.stream().map(i -> i * 10).collect(Collectors.toSet());// {key1=value:10, key2=value:20, key3=value:30}Map<String, String> collect2 = list1.stream().map(i -> i * 10).collect(Collectors.toMap(key -> "key" + key/10, value -> "value:" + value));// [1, 3, 4]TreeSet<Integer> collect3= Stream.of(1, 3, 4).collect(Collectors.toCollection(TreeSet::new));System.out.println(collect+"\n"+collect1+"\n"+collect2+"\n"+collect3)}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim退出快捷键

退出vim的快捷键 不需要进入命令编辑模式 按住shift zz 保存退出 zq 不保存退出&#xff0c;q表示放弃 之所以按住shift&#xff0c;其实是切换大小写 在命令编辑模式下&#xff1a; :q 不保存退出 :q! 不保存强制退出 :wq 保存退出&#xff0c;w表示写入&#xff0c;…

SpringBoot瘦身打包部署

一、前言 最近做的项目由于引入第三方库导致在运行mvn clean package 打jar时&#xff0c;编译出来的 Jar 包很大&#xff08;服务器多达500MB&#xff09;。 二、瘦身前的Jar包 SpringBoot编译出来的Jar包中&#xff0c;磁盘占用大的&#xff0c;是一些外部依赖库&#xff…

XShell直接拖拽文件到服务器,不使用Xftp等文件上传工具

很多情况下&#xff0c;我们使用 Xshell 工具时&#xff0c;如果遇到文件的上传和下载会不可避免的要用到另外一个工具 Xftp&#xff0c;但是频繁的使用 Xftp 会比较麻烦&#xff0c;那么有没有一种更加直接简单的方法呢&#xff1f; 当我们所需要上传的文件比较小的时候&…

System.getProperty()方法获取系统变量

今天在阅读JDBC的DriverManager类源码时&#xff0c;看到了这么一句代码&#xff1a; System.getProperty(“jdbc.drivers”)&#xff1b;getProperty()这个方法是获取指定键指示的系统属性的&#xff0c;也就是说上面的代码获取的是jdbc.drivers这个属性。我写了个测试测试输…

Spring Boot集成Druid异常discard long time none received connection.

Spring Boot集成Druid异常 在Spring Boot集成Druid项目中&#xff0c;发现错误日志中频繁的出现如下错误信息&#xff1a; discard long time none received connection. , jdbcUrl : jdbc:mysql://******? useSSLfalse&allowPublicKeyRetrievaltrue&useUnicodetrue…

局部变量为什么必须赋值才可以使用

在java内存模型中规定&#xff0c;一个新的变量只能在主存中初始化&#xff0c;不允许在工作内存中直接使用一个未被初始化的变量。 工作内存可以理解为局部变量定义的内存区域&#xff0c;也就是线程的工作内存。所谓局部变量就是线程私有的不共享的空间。 类加载准备阶段 类变…

Java 赋值 “=” 讲解

前言 我们从接触java第一天&#xff0c;就是到 是赋值的意思&#xff0c;把等号右边结果的值&#xff0c;赋给等号左边的变量&#xff0c;那具体是怎样赋值呢&#xff1f;你有了解过吗&#xff1f; 1.0版本 大家都知道&#xff0c;java中有 8大基本类型&#xff0c;对于基本…

Linux 系统管理命令:时间、进程、网络、磁盘、关机重启等 top命令用法详解

文章目录系统管理常用命令1. 日期1.1 查看日历: cal1.2 查看/设置时间: date2. 进程2.1 查看进程信息: ps2.2 动态显示进程信息: top2.3 终止进程: kill2.4 服务的管理: service3. 网络3.1 网卡信息查询与配置: ifconfig3.2 检测远程主机连通性: ping3.3 查看网络状态(监听端口…

BigDecimal 加减乘除顺序验证

结论&#xff1a;BigDecimal 与常识的加减乘除计算优先顺序无关联&#xff0c;采用的是方法调用顺序&#xff0c;顺序执行。 public static void main(String[] args) {BigDecimal two new BigDecimal("2");BigDecimal one new BigDecimal("1");System.…

LocalDate详解

LocalDate使用 localDate时间创建方式 /*** localDate时间创建方式* 获取当前时间*/Testpublic void localDateCreate() {LocalDate yyyyMMdd LocalDate.now();LocalTime HHmmssSSS LocalTime.now();LocalDateTime yyyyMMddHHmmssSSS LocalDateTime.now();System.out.print…

Java8中计算时间的四种方式及区别Period、Duration、ChronoUnit、Until 时间区间Duration的简单使用

一.简述 在Java8中&#xff0c;我们可以使用以下类来计算日期时间差异&#xff1a; 1.Period 2.Duration 3.ChronoUnit二.Period类 Period类计算只有年、月、日 计算的是LocalDate两个时间间隔的年月日 public static void main(String[] args) {LocalDate startTime Loc…

[JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)

引言 成员变量和局部变量在每种编程语言中都有涉及&#xff0c;如果之前了解过其他语言的成员变量或者局部变量&#xff0c;那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同&#xff0c;这一块的东西也不能说难&#xff0c;如果第一次接触可能会感觉有点乱&a…

【Java多线程】内存模型JMM—主内存与工作内存分析

文章目录JAVA内存模型JVM主内存与工作内存描述JVM内存间交互规则JVM先行发生原则内存交互基本操作的 3 个特性原子性(Atomicity)可见性(Visibility)有序性(Ordering)上述内存模型与Java多线程之间的问题JAVA内存模型 共享变量&#xff1a;如果一个变量在多个线程的工作内存中都…

Java 两个日期之间相差的天数计算 Calendar的DAY_OF_MONTH, DAY_OF_YEAR, DATE的区别

项目开发过程中经常遇到这类需求&#xff0c;计算两个日期之间的差&#xff0c;今天我系统总结一下这个技术点&#xff1a; 1、两个日期之间相差的天数&#xff0c;日期为单位&#xff08;比如相差两秒&#xff0c;可能就相差一天&#xff0c;1.12:23:59&#xff1a;59和13:01…

JMM中工作内存和主内存的关系

Java运行时的数据区域分布&#xff1a; 一、共享区域&#xff1a; &#xff08;1&#xff09;方法区:存储了每个类的信息&#xff08;包括类的名称、方法信息、字段信息&#xff09;、静态变量、常量以及编译器编译后的代码等。其中常量池就是在此区域&#xff1a;记录了每一…

使用MyBatis获得包含内嵌对象或对象集合的结果——MyBatis结果集封装(复杂对象,连接查询结果集封装)

最终要获得的SysUser对象 public class SysUser implements Serializable {//普通String属性private String userId;private String userName;private String userPhone;private String userPassword;private String userLastLoginTime;private String userCreateTime;private…

SpringBoot配置MyBatis的sql执行超时时间(mysql)

当某些sql因为不知名原因堵塞时&#xff0c;为了不影响后台服务运行&#xff0c;想要给sql增加执行时间限制&#xff0c;超时后就抛异常&#xff0c;保证后台线程不会因为sql堵塞而堵塞。 方法一 yml全局配置&#xff1a;单数据源可以&#xff0c;多数据源时会失效 方法二 j…

HTTP协议中的302,303状态码

之前也只知道302,303是请求重定向,但是当被问到302,303的具体区别是什么的时候我有点迷,现在就为了加强记忆,来了解下具体情况: 302是http1.0的内容&#xff0c;303是http1.1的内容。301和302本来在规范中是不允许重定向时改变请求方法的&#xff08;将POST改为GET&#xff09…

Java8中Stream为什么要boxed

在介绍boxed前&#xff0c;先看下面一个案例 Java8中的有个生成随机数的Random类&#xff0c;先看下面代码&#xff0c;功能是生成100个随机数。数字在0到100之间。 Random random new Random(); IntStream intStream random.ints(0, 100); intStream.lim…

Spring工具类:FileCopyUtils、StreamUtils

文章目录FileCopyUtilsStreamUtils参考资料Spring 在 org.springframework.util 包提供了很多实用的工具类。今天关心一下Copy 相关的两个&#xff1a; FileCopyUtils FileCopyUtils就是对StreamUtils的copy方法进行了封装&#xff0c;在每次复制完毕后关闭流。&#xff08;因…