首页 > 其他分享 >使用CompletableFuture提升代码执行效率示例

使用CompletableFuture提升代码执行效率示例

时间:2024-01-10 11:23:36浏览次数:34  
标签:newEnergyQuery return area 示例 vo CompletableFuture user 代码执行

代码示例

/**
     * 全国 / 区域数据统计:
     * 1. 新能源规模
     * 2. 电网容量
     * 3. 输配线路
     * 4. 变电站
     * 5. 工作场站
     *
     * @param area area
     * @param user user
     * @return the object
     * @since 3.0.0
     */
    public StatisticsDataVO statistics(String area, CurrentUser user) {
        final StatisticsDataVO vo = StatisticsDataVO.builder().build();

        // 1. 新能源规模
        CompletableFuture<NewEnergyVO> newEnergyQuery = getNewEnergyFuture(vo, area, user);
        // 2. 电网容量
        CompletableFuture<Double> gridCapacitQuery = getGridCapacitQueryFuture(vo, area, user);
        // 3. 输配线路
        CompletableFuture<LineStatisticsResponse> lineQuery = getLineQueryFuture(vo, area, user);
        // 4. 变电站
        CompletableFuture<JsonNode> substationQuery = getSubstationQueryFuture(vo, area, user);
        // 5. 工作场站
        CompletableFuture<List<StationResponse>> stationQuery = getStationQueryFuture(vo, user);

        CompletableFuture<Void> allQuery = CompletableFuture.allOf(newEnergyQuery,
            gridCapacitQuery,
            lineQuery,
            substationQuery,
            stationQuery);

        CompletableFuture<StatisticsDataVO> future = allQuery.thenApply((result) -> {
            log.info("------------------ 全部查询都完成 ------------------ ");
            return vo;
        }).exceptionally((e) -> {
            log.error(e.getMessage(), e);
            return StatisticsDataVO.builder().build();
        });

        future.join();
        return vo;
    }
private CompletableFuture<NewEnergyVO> getNewEnergyFuture(StatisticsDataVO vo, String area, CurrentUser user) {
        CompletableFuture<NewEnergyVO> newEnergyQuery = CompletableFuture.supplyAsync(() -> {
            NewEnergyVO newEnergyVO = NewEnergyVO.builder().build();

            if (UserUtils.isChongqingUser(user)) {
                return newEnergyVO;
            }
            if (UserUtils.isZhejiangUser(user)) {
                // 如果是浙江油田 目前只获取 燃气发电 类型
                final NewEnergyQuery query = NewEnergyQuery.builder().type(NewEnergyType.GAS_POWER).build();
                return getNewEnergyVO(area, newEnergyVO, query);
            }

            final NewEnergyQuery query = NewEnergyQuery.builder().region(area).build();
            return getNewEnergyVO(area, newEnergyVO, query);
        });

        newEnergyQuery.thenAccept((result) -> {
            log.info(" 查询新能源规模结果: [{}]", result);
            vo.setNewEnergy(result);
        }).exceptionally((e) -> {
            log.error(" 查询新能源规模异常: {}", e.getMessage(), e);
            return null;
        });
        return newEnergyQuery;
    }

使用文档参考:https://blog.csdn.net/zsx_xiaoxin/article/details/123898171

标签:newEnergyQuery,return,area,示例,vo,CompletableFuture,user,代码执行
From: https://www.cnblogs.com/guanxiaohe/p/17956108

相关文章

  • Qt QProcess进程间调用及交互通信,完整示例
    1.概述使用Qt进行应用程序开发,主要是通过QProcess类用于启动外部程序并与其进行通信.1.1.运行进程要启动进程,需要运行的程序的名称和命令行参数作为参数传递给start()。参数以QStringList形式提供。start()方法原型:voidstart(constQString&program,constQStringList&a......
  • netty: Marshalling序列化示例
    一、请求对象和响应对象,分别要实现Serializable接口packagecn.edu.tju;importjava.io.Serializable;publicclassUserRequestimplementsSerializable{privateStringusername;privateStringpassword;publicStringgetUsername(){returnus......
  • 使用Jsoup的Java网络爬虫示例:抓取在线考试平台试题数据
    网络爬虫是一种强大的工具,用于从互联网上收集信息。而在Java中,Jsoup是一款常用的HTML解析库,提供了便捷的API来解析、提取和操作HTML数据。在本文中,我们将深入探讨如何利用Jsoup库构建一个Java网络爬虫,并使用代理服务器来抓取在线考试平台的试题数据。介绍Jsoup和网络爬虫首先,我们将......
  • 基于Go语言的简单网络爬虫示例:获取智联招聘网页内容
    发起HTTP请求:使用Go的net/http包发起HTTP请求以获取网页内容。解析HTML内容:使用HTML解析器(如Go的golang.org/x/net/html包)来解析网页内容,找到你感兴趣的信息。提取目标数据:通过使用正则表达式或者更好的选择是HTML解析库来提取所需信息。存储或处理信息:将提取的信息存储到文件、数......
  • 【flink番外篇】9、Flink Table API 支持的操作示例(3)- 通过API查询表和使用窗口函数的
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • 【flink番外篇】9、Flink Table API 支持的操作示例(2)- 通过Table API 和 SQL 创建视图
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • C#中Queue队列的基本使用示例
       在C#中,Queue是一个内置的FIFO(First-In-First-Out)集合,这意味着元素在队列中的顺序与它们被添加的顺序相同,当且仅当从队列中移除元素时,元素出队的顺序才是正确的。Queue在.NETFramework中是一个泛型集合类型,这意味着你可以存储任何类型的元素。它提供了许多方法来操作队列,......
  • 敏捷研发管理流程及示例-Leangoo领歌|永久免费的敏捷开发工具
    ​ Leangoo领歌是一款永久免费的专业的敏捷开发管理工具,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。Leangoo领歌上手快、实施成本低,可帮助企业快速落地敏捷,提质增效、缩短周期、加速创新。Leangoo领歌区别于传统项目管理软件,项目的需求......
  • MMBT3904资料手册参数解读及应用示例分享
    MMBT3904是一种三极小信号NPN晶体管。它具有低噪声、高放大倍数和较高的开关速度等特点。MMBT3904广泛应用于放大、开关和驱动电路等领域。它是一款常见的通用型晶体管,常被用于低功耗设备和数字电路中。常用于低电压、中电流放大应用。MMBT3904重要参数解读最大集电极电流(ICmax):这是......
  • 40 个简单又有效的 Linux Shell 脚本示例
    原创:厦门微思网络  【微思2002年成立,专业IT认证培训21年!】linux学习专栏历史上,shell一直是类Unix系统的本地命令行解释器。它已被证明是Unix的主要功能之一,并发展成为一个全新的主题。Linux提供了各种功能强大的shell,包括Bash、Zsh、Tcsh和Ksh。这些外壳最令人惊讶......