【Java 8 新特性】Java CompletableFuture applyToEither()
Java
CompletableFuture
实现CompletionStage
和Future
接口。
CompletableFuture.applyToEither
继承自CompletionStage
。
applyToEither
方法返回一个新的CompletionStage
,当此阶段或另一个给定阶段正常完成时,将使用相应的结果作为所提供函数的参数来执行。
从Java
文档中找到applyToEither
方法的方法声明。
<U> CompletionStage<U> applyToEither(CompletionStage<? extends T> other, Function<? super T,U> fn)
类型参数U
是函数的返回类型
参数other
是另一个CompletionStage
。
参数fn
是用于计算返回的CompletionStage
的值的函数。
applyToEither
返回新的CompletionStage
。
示例1:
ApplyToEitherDemo1.java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class ApplyToEitherDemo1 {public static void main(String[] args) throws InterruptedException, ExecutionException {CompletableFuture<Person> primaryFuture = CompletableFuture.completedFuture(new Person("Mohan", "Varanasi"));CompletableFuture<Person> secondaryFuture = CompletableFuture.completedFuture(new Person("Shyam", "Prayagraj"));CompletableFuture<String> future =primaryFuture.applyToEither(secondaryFuture, person -> person.getName() + " - " +person.getCity());System.out.println(future.get());}
}
输出
Mohan - Varanasi
applyToEither
方法将此完成阶段或其他通常较早完成的完成阶段的结果应用于给定函数,并返回一个新的完成阶段。
在上面的示例中,有时我们会得到primaryFuture
的结果,有时会得到secondaryFuture
的结果。
示例2:
ApplyToEitherDemo2.java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class ApplyToEitherDemo2 {public static void main(String[] args) throws InterruptedException, ExecutionException {CompletableFuture<Person> mainFuture = CompletableFuture.supplyAsync(() -> getPerson());CompletableFuture<Person> defaultFuture = CompletableFuture.supplyAsync(() -> getDefaultFuture());CompletableFuture<String> future = mainFuture.applyToEither(defaultFuture,person -> person.getName() + " - " + person.getCity());System.out.println(future.join());}private static Person getPerson() {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}return new Person("Krishna", "Delhi");}private static Person getDefaultFuture() {return new Person("Default name", "Default city");}
}
输出
Default name - Default city
此处defaultFuture
将比mainFuture
早完成。
因此applyToEither
会将defaultFuture
的结果应用于给定函数。
示例3: 在acceptEither
上使用applyToEither
的示例。
ApplyToEitherDemo2.java
import java.util.concurrent.CompletableFuture;
public class ApplyToEitherDemo3 {public static void main(String[] args) {CompletableFuture<Person> mainFuture = CompletableFuture.supplyAsync(() -> getPerson());CompletableFuture<Person> defaultFuture = CompletableFuture.supplyAsync(() -> getDefaultFuture());CompletableFuture<String> cfuture = mainFuture.applyToEither(defaultFuture,person -> person.getName() + " - " + person.getCity());CompletableFuture<String> otherCFuture = CompletableFuture.supplyAsync(() -> getMsg());CompletableFuture<Void> cf = cfuture.acceptEither(otherCFuture, s -> System.out.println(s));cf.join();}private static String getMsg() {try {Thread.sleep(400);// Thread.sleep(1000);} catch (InterruptedException e) {System.err.println(e);}return "Namo - Gujraat";}private static Person getPerson() {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}return new Person("Krishna", "Delhi");}private static Person getDefaultFuture() {try {Thread.sleep(600);} catch (InterruptedException e) {e.printStackTrace();}return new Person("Default name", "Default city");}
}
输出
Namo - Gujraat
注:applyToEither()
和acceptEither()
的区别
当两个future其中一个完成后,acceptEither()
用于只是简单地调用一些代码,applyToEither()
会返回一个新的future
,这个future
是在前面两个future
其中一个完成后进行执行完成。
参考文献
【1】Class CompletableFuture
【2】Java CompletableFuture acceptEither()
【3】Java CompletableFuture applyToEither()
【Java 8 新特性】Java CompletableFuture applyToEither()相关推荐
- Java 10新特性
Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...
- Java 8 新特性 宋红康跟学
Java 8 新特性 Java 8 新特性简介 思维导图 并行流与串行流 Lambda表达式 Lambda 表达式语法 语法格式一:无参,无返回值,Lambda体只需一条语句 语法格式二:Lambda ...
- java自动化测试语言高级之Java 9 新特性
java自动化测试语言高级之Java 9 新特性 文章目录 java自动化测试语言高级之Java 9 新特性 Java 9 新特性 Java 9 新特性 Java 9 发布于 2017 年 9 月 2 ...
- java自动化测试语言高级之Java 8 新特性
java自动化测试语言高级之Java 8 新特性 文章目录 java自动化测试语言高级之Java 8 新特性 Java 8 新特性 Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 ...
- 七、Java 14 新特性
七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...
- Java 9 新特性概述
转载自 Java 9 新特性概述 Java 9 正式发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化.其中最重要的改动是 ...
- IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍
文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...
- Java 11 新特性
2019独角兽企业重金招聘Python工程师标准>>> Java 11 新特性 转载于:https://my.oschina.net/u/3764794/blog/2993127
- Java 8新特性终极指南
在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Ja ...
- stream distinct去重_再来看看Java的新特性——Stream流
半年前开始试着使用Java的新特性,给我印象最深的就是Stream流和Optional.其中Stream提高了看法效率,让代码看起来十分清爽. 为什么要使用流? 摘要中已经说明了,为了提高开发效率.流 ...
最新文章
- java 自带thread分析工具_java自带的jvm分析工具
- 中英文 php cms,phpcms v9英语语言包应用详解
- 将C1Chart数据导出到Excel
- 五分钟叫你看懂美国金融危机的成因和巨大危害[转]
- hdu 4513(manacher+dp)
- before和after怎么区分_如何区分before和after~有时候觉得两者可以通用
- LeetCode【1--两数之和】 LeetCode【2--两数相加】
- easyui 收费_收费班长喻玉华三尺岗亭献青春
- wgs-84,gcj-02,bd-09的相互转换,高德,世界测量,百度坐标系的相互转换,坐标系转换
- 微服务升级_SpringCloud Alibaba工作笔记0026---Nacos之Linux安装nacos
- Java中的锁---队列同步器
- Kubernetes vs OpenStack
- 仿WPS PDF阅读器
- Logistic回归分析
- vue百度地图加载离线瓦片(包含百度离线文件+瓦片下载器)
- ros打开笔记本电脑的摄像头
- 【一坨理论AC的题】Orz sxy大佬
- Matlab电影动画的初级制作
- 新增收货地址【项目 商城】
- 8种网页数据的采集工具