Java Stream 与 CompletableFuture 连用示例及代码分析

基本介绍

Stream 对于一般集合的流式处理,简化代码的书写复杂的。
介绍文章 链接

CompletableFuture 封装的多线程处理方式,可以替代一般的 ExecutorService 执行任务,同时提供多种方法应对多线程场景。
介绍文章 链接

连用场景

批量处理任务并且任务内容复杂度较高,同时使用 List 的 stream 简化写法,但可读性可能会变差。

	 	// 业务数据为 listObject 也是本次要处理的List 集合对象

        List<CompletableFuture<MyPerson>> completableFutureList = listObject.stream().map(item -> CompletableFuture.supplyAsync(() -> {
            // 业务处理
            System.out.println(item);
            // 业务处理每一条记录最终返回结果
            return item;
        })).collect(Collectors.toList());

        // 等待所有结束
        CompletableFuture.allOf(completableFutureList.toArray(new CompletableFuture[0])).join();
        // 获取结果
        List<MyPerson> collect1 = completableFutureList.stream().map(CompletableFuture::join).collect(Collectors.toList());

        // 处理业务结果
        System.out.println("collect1 = " + collect1);

部分说明

listObject.stream().map 将List 中的每一个对象拿出并做对应的业务处理并返回处理结果,这里我简单写了 实际业务操作可能要调用其他 Service 完成业务操作;

CompletableFuture.supplyAsync 使用异步线程处理,同时这种方式可以获得返回的结果

.map(item -> CompletableFuture.supplyAsync(() -> {
将每一个对象都提交到 CompletableFuture 中做异步处理。

.collect(Collectors.toList()) 将最终 CompletableFuture 处理的集合结果以List 方式返回。

CompletableFuture.allOf 等待其中的 completableFutureList 所有异步处理的结果返回。

.join()
完成后返回结果值,或引发异常,如果异常完成。
为了更好符合常用功能形式的使用,如果完成此任务所涉及的计算 CompletableFuture 抛出了一个异常,此方法抛出了一个 {@link CompletionException} 与底层异常是其原因。

completableFutureList.stream().map(CompletableFuture::join).collect(Collectors.toList())
将异步线程任务 completableFutureList 中未来的结果做Stream 流式处理, .map 处理未来结果的每条数据, .map(CompletableFuture::join) 处理未来结果的每条数据,处理的动作是 CompletableFuture::join 从任务中获取每一个任务的处理结果。

.collect(Collectors.toList()) 将 .map 处理的结果组合成List 并返回结果 List。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值