文章目录

  • thenCompose 学习

thenCompose 学习

thenCompose允许将两个异步操作进行流水线,第一个操作完成时,将其结果作为参数传递给第二个操作。

package book.java8.char11;import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.IntStream;import static java.util.stream.Collectors.toList;/*** @author MI* @version 1.0* @date 2020/12/20 10:27*/
public class CompletableFutureDemo {/*** json样式的 字符串*/static class ToStrJson {public static String toJson(IsDigits isDigits) {delay();final String result = ToStringBuilder.reflectionToString(isDigits, ToStringStyle.JSON_STYLE);System.out.println("ToStrJson:" + result);return result;}}static class IsDigits {/*** 字符串*/private final String str;/*** str中包含的数字*/private final String digit;public IsDigits(String str, String digit) {this.str = str;this.digit = digit;}public static IsDigits parse(String str) {//字符串中提取数据return new IsDigits(str, StringUtils.getDigits(str));}@Overridepublic String toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);}}private static void delay() {try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}}private static String apply() {delay();return RandomStringUtils.randomAlphanumeric(5);}/*** testMap 和testCompletableFuture 效果一样,为了测试 map和 CompletableFuture (thenCompose)* <p>* thenCompose允许将两个异步操作进行流水线,第一个操作完成时,将其结果作为参数传递给第二个操作。* 换句话说,可以创建两个两个CompletableFutre对象,对第一个CompletableFuture调用* thenCompose,并向其传递一个函数,* </p>*/public static void testMap() {final List<String> collect = IntStream.rangeClosed(1, 10).mapToObj(i -> {final String apply = apply();System.out.println("生成的随机字符串:" + apply);return apply;}).map(IsDigits::parse)//字符串转换成 IsDigits.map(ToStrJson::toJson)// IsDigits 转换 json字符串.collect(Collectors.toList());}public static void testCompletableFuture() {final List<CompletableFuture<String>> collect = IntStream.rangeClosed(1, 10).mapToObj(i ->CompletableFuture.supplyAsync(() -> {final String apply = apply();System.out.println("生成的随机字符串:" + apply);return apply;})).map(future -> future.thenApply(IsDigits::parse)).map(future -> future.thenCompose(isDigits ->CompletableFuture.supplyAsync(() -> ToStrJson.toJson(isDigits)))).collect(Collectors.toList());//等待 执行完毕collect.stream().map(CompletableFuture::join).collect(toList());}public static void main(String[] args) throws InterruptedException {final long start = System.nanoTime();testCompletableFuture();System.out.println();System.out.println("执行时间:" + (System.nanoTime() - start) / 1_000_000);}
}

CompletableFuture.thenCompose相关推荐

  1. CompletableFuture 实现异步计算

    在Markdown的语法中,<u>下划线</u>中的文字会被解析器加上下划线,为了不影响阅读,本文中JDK文档涉及到<U>都会替换为<N>,请各位注意. ...

  2. CompletableFuture API用法介绍(二)

    文章目录 一.纯消费 API 1.thenAccep 2.thenAcceptBoth 3.runAfterBoth 4.thenRun(Runnable action) 二.组合API 1.then ...

  3. 用java实现combin函数_Java8的CompletableFuture

    Java8的CompletableFuture Java8提供了一种函数风格的异步和事件驱动编程模型CompletableFuture,该模型不同于以往Java版本,不会造成堵塞Blocking.过去 ...

  4. CompletableFuture教程

    文章目录 前言 一.基础篇 1.案例1_ CompletableFuture.supplyAsync() 1.1.需求 1.2.代码 1.3.总结 2.案例2_ CompletableFuture.t ...

  5. java 检视_Java高并发系列——检视阅读(五)

    JUC中工具类CompletableFuture CompletableFuture是java8中新增的一个类,算是对Future的一种增强,用起来很方便,也是会经常用到的一个工具类,熟悉一下. Co ...

  6. java supplier_Java 函数式编程

    前些年 Scala 大肆流行,打出来 Java 颠覆者的旗号,究其底气来源,无非是函数式和面向对象的"完美结合",各式各样的"语法糖",但其过高的学习门槛,又给 ...

  7. 《Java 8实战》

    Java 8实战 行为参数化 行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式.一言以蔽之,它意味 着拿出一个代码块,把它准备好却不去执行它.这个代码块以后可以被你程序的其他部分调用, 这 ...

  8. JAVA 拾遗 --Future 模式与 Promise 模式

    JAVA 拾遗 --Future 模式与 Promise 模式 写这篇文章的动机,是缘起于微信闲聊群的一场讨论,粗略整理下,主要涉及了以下几个具体的问题: 同步,异步,阻塞,非阻塞的关联及区别. JA ...

  9. Future 模式与 Promise 模式

    这篇文章主要涉及了以下几个具体的问题: 同步,异步,阻塞,非阻塞的关联及区别. JAVA 中有 callback 调用吗? jdk 包中的 Future 怎么用? Future 模式和 Promise ...

最新文章

  1. Java读写文件,中文乱码解决
  2. python 报错 AttributeError: type object ‘datetime.datetime‘ has no attribute ‘datetime‘
  3. asp.net DBHelper类
  4. 编程之美-求二进制数中1的个数方法整理
  5. 自己使用的Android框架
  6. 牛客 - Colorful Tree(dfs序+LCA)
  7. 用户选购计算机可分为,助理电子商务师考试试题(1+答案)
  8. pytorch 卷积
  9. NinePatchChunk.java分析
  10. putExtra方法
  11. orcale库表增加一个字段,自动设置为系统默认时间
  12. 查询ip区间的ip地址的sql语句
  13. mac系统如何管理桌面图标
  14. (摘自CSDN的koy0755)一步一步实现数据库到类的自动化映射(二) 类层次的设计 类的实现...
  15. 小米路由器Mesh,信号有多牛?
  16. 【多元统计分析】08.协方差阵的假设检验
  17. 漫步华尔街——股市历久弥新的成功投资策略读书笔记
  18. SVN客户端简明使用教程
  19. 计算机研究生刚上岸,深度学习方向,想要就业的话,应该如何规划研究生三年?...
  20. CBTC系统标准: 1474.1---系统性能及功能需求

热门文章

  1. 火星人敏捷开发手册2012-06-30版发布(新增博客索引4页+火星人产品预告2页)
  2. 肖博高考数学二轮复习方法之圆锥曲线 解题策略附带题型解析
  3. Python爬虫筛选股票
  4. jqweui Toast
  5. subtext3插件安装
  6. DLIA视觉缺陷检测平台——电子元器件焊点缺陷检测
  7. 闽南歌歌词有一句电子计算机,抖音wow you can really dance下一句是什么歌 歌词全文...
  8. Appium基础篇10-元素定位之by_accessibility_id
  9. mysql日志恢复 50530_Mysql之binlog日志恢复操作记录
  10. TXT格式小说实现分章节