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

【java12】Collectors和Completionstage的新API

Java12向Stream API的Collectors中引入了一种新方法,可以对集合执行两种不同的操作,然后合并结果。

Collectors的新API

Collectors.teeing()方法的声明

public static <T, R1, R2, R>
Collector<T, ?, R> teeing(Collector<? super T, ?, R1> downstream1,Collector<? super T, ?, R2> downstream2,BiFunction<? super R1, ? super R2, R> merger) {
}

这个方法接受两个收集器downstream1和downstream2,以及一个BiFunction函数merger作为参数。在收集元素时,会同时使用这两个收集器,并且将它们的结果传递给merger函数来合并成一个最终的结果。

Collectors.teeing()方法的使用

package com.morris.java12;import java.util.stream.Collectors;
import java.util.stream.Stream;/*** Collector.teeing()方法的使用*/
public class CollectorTeeingDemo {public static void main(String[] args) {double mean= Stream.of(1, 2, 3, 4, 5, 6, 7).collect(Collectors.teeing(Collectors.summingDouble(i -> i), Collectors.counting(),(sum, n) -> sum / n));System.out.println(mean); // 4}
}

Completionstage的新API

CompletionStage是Java8引入的并发编程工具,用于表示一个异步计算的futrue或promise。

在Java12中,增加了exceptionallyAsync和exceptionallyComposeAsync方法。

exceptionallyAsync方法

exceptionallyAsync方法是在原有的 exceptionally 方法基础上增加了异步执行的能力。当原有的CompletionStage执行失败时,会执行exceptionally方法中的函数。

package com.morris.java12;import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;/*** 演示CompletionStage.exceptionallyAsync的使用*/
public class CompletionStageDemo {public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> stage = CompletableFuture.supplyAsync(() -> {throw new RuntimeException("Something went wrong");});stage.exceptionallyAsync(e -> {// 处理异常System.out.println(e.getMessage());return 0; // 返回一个默认值}).thenAccept(System.out::println); // 输出 0stage.get();}
}

exceptionallyComposeAsync方法

exceptionallyComposeAsync方法是在原有的exceptionallyCompose方法基础上增加了异步执行的能力。当原有的 CompletionStage执行失败时,会执行exceptionallyCompose方法中的函数,并返回一个新的CompletionStage。

package com.morris.java12;import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;/*** 演示CompletionStage.exceptionallyComposeAsync的使用*/
public class CompletionStageDemo2 {public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<Integer> stage = CompletableFuture.supplyAsync(() -> {throw new RuntimeException("Something went wrong");});stage.exceptionallyComposeAsync(e -> {// 处理异常并返回一个新的CompletionStageSystem.out.println(e.getMessage());return CompletableFuture.completedFuture(0);}).thenAccept(System.out::println); // 输出 0stage.get();}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 揭秘“消费即赚”的循环购模式
  • [matlab]周期性信号分析
  • Spring AOP - 自定义注解实现共性需求
  • 【C++】开源:地图投影和坐标转换proj库配置使用
  • qt 自定义信号和槽举例
  • Spring的AOP进阶。(AOP的通知类型、通知顺序、切入点表达式和连接点。)
  • 数据绑定注解功能
  • @component注解的分类
  • 【手写数据库内核组件】0201 哈希表hashtable的实战演练,多种非加密算法,hash桶的冲突处理,查找插入删除操作的代码实现
  • uni-app三部曲之三: 路由拦截
  • 【系统架构设计】计算机组成与体系结构(一)
  • alibaba EasyExcel 简单导出数据到Excel
  • 创建vue3项目
  • 侯捷C++面向对象高级编程(上)-9-扩展补充:类模板、函数模板及其他
  • 哪些独立站外链策略最有效?
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 11111111
  • CSS实用技巧干货
  • HTTP 简介
  • in typeof instanceof ===这些运算符有什么作用
  • js如何打印object对象
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • php ci框架整合银盛支付
  • Vue.js 移动端适配之 vw 解决方案
  • vue:响应原理
  • Vue--数据传输
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 回顾 Swift 多平台移植进度 #2
  • 力扣(LeetCode)357
  • 通过npm或yarn自动生成vue组件
  • 用jQuery怎么做到前后端分离
  • 自制字幕遮挡器
  • 数据库巡检项
  • # 职场生活之道:善于团结
  • ###项目技术发展史
  • #pragma once与条件编译
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (~_~)
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1)无线电失控保护(二)
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (三) diretfbrc详解
  • (十一)手动添加用户和文件的特殊权限
  • (转)Mysql的优化设置
  • (转)我也是一只IT小小鸟
  • (转)用.Net的File控件上传文件的解决方案
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • **PHP分步表单提交思路(分页表单提交)
  • .NET 指南:抽象化实现的基类
  • .NET导入Excel数据
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • @AutoConfigurationPackage的使用
  • []sim300 GPRS数据收发程序