首页 > 其他分享 >【JUC】7-CompletableFutrue的应用 大厂案例分析 -电商比价

【JUC】7-CompletableFutrue的应用 大厂案例分析 -电商比价

时间:2024-06-12 22:55:56浏览次数:16  
标签:JUC String System productName netMall CompletableFutrue println 电商 out

1.需求说明

1.1 同一款产品,同时搜索出同款产品在各大电商平台的售价;

1.2 同一款产品,同时搜索出本产品在同一个电商平台下,各个入驻卖家售价是多少;

2.输出返回:

出来结果希望是同款产品的在不同地方的价格清单列表,返回一个List<String>

《Mysql》 in jd price is 88.05

《Mysql》 in Dangdang price is 86.11

《Mysql》 in Taobao price is 88.05

3.解决方案,比对同一个商品在各个平台上的价格,要求获得一个清单列表

3.1 step by step,按部就班,一个一个查

3.2 all in, 一口气多线程异步任务同时查询

 

实现代码:

 商城对象封装,对外暴露查价方法,模拟根据产品查询价格

 1 class NetMall {
 2     @Getter
 3     private String netMall;
 4 
 5     public NetMall(String netMall) {
 6         this.netMall = netMall;
 7     }
 8 
 9     public double calcPrice(String productName) {
10         return mockQueryPriceFromMall(productName);
11     }
12 
13     private double mockQueryPriceFromMall(String productName) {
14         try {
15             TimeUnit.SECONDS.sleep(1);
16         } catch (InterruptedException e) {
17             e.printStackTrace();
18         }
19         return ThreadLocalRandom.current().nextDouble()*2 + productName.charAt(0);
20     }
21 }

查询价格实现类

 1 public class CompletableFutrueMallDemo {
 2     static List<NetMall> mallList = Arrays.asList(
 3             new NetMall("jd"),
 4             new NetMall("dangdang"),
 5             new NetMall("taobao")
 6     );
 7 
 8     public static List<String> getPrice(List<NetMall> mallList, String productName) {
 9         return mallList.stream()
10                 .map(netMall -> formatPrice(productName, netMall))
11                 .collect(Collectors.toList());
12     }
13 
14     public static List<String> getPriceByCompletableFutrue(List<NetMall> mallList, String productName) {
15         return mallList.stream()
16                 .map(netMall ->
17                         CompletableFuture.supplyAsync(() -> formatPrice(productName, netMall)))
18                 .collect(Collectors.toList())
19                 .stream()
20                 .map(CompletableFuture::join)
21                 .collect(Collectors.toList());
22     }
23 
24     private static String formatPrice(String productName, NetMall netMall) {
25         return String.format("《%s》 in %s price is %.2f", productName, netMall.getNetMall(), netMall.calcPrice(productName));
26     }
27 
28     public static void main(String[] args) {
29         System.out.println("start to query price step by step");
30         long begin = System.currentTimeMillis();
31         List<String> result = getPrice(mallList, "mysql");
32         long end = System.currentTimeMillis();
33         System.out.println("cost time is " + (end - begin) + "ms");
34 
35         System.out.println("=================================");
36 
37         System.out.println("start to query price step by CompletableFutrue");
38         begin = System.currentTimeMillis();
39         result = getPriceByCompletableFutrue(mallList, "mysql");
40         end = System.currentTimeMillis();
41         System.out.println("cost time is " + (end - begin) + "ms");
42 
43         System.out.println("===========result show===========");
44         for (String s : result) {
45             System.out.println(s);
46         }
47     }
48 }

 

标签:JUC,String,System,productName,netMall,CompletableFutrue,println,电商,out
From: https://www.cnblogs.com/zhaohan258/p/18244866

相关文章

  • Vue--》从零开始打造交互体验一流的电商平台(二)
    今天开始使用vue3+ts搭建一个电商项目平台,因为文章会将项目的每处代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏,学习更多前端vue知......
  • # RocketMQ 实战:模拟电商网站场景综合案例(六)
    RocketMQ实战:模拟电商网站场景综合案例(六)一、RocketMQ实战:项目公共类介绍1、ID生成器:IDWorker:Twitter雪花算法。在shop-common工程模块中,IDWorker.java是ID生成器公共类,运用Twitter雪花算法,自动生成项目ID,而不会存在重复现象。packagecom.itheima.utils......
  • 【API接口开发系列】淘宝与京东商品评论接口:商品评论接口在电商生态中的作用
    一、淘宝商品评论接口:洞察消费者真实心声淘宝作为中国最大的电商平台之一,其商品评论接口为开发者提供了海量的用户评价数据。通过该接口,API接口接入(taobao2024api)开发者可以获取到商品的详细评论信息,包括评价内容、评分、图片、购买时间等。这些信息不仅可以帮助消费者更全面......
  • 为开发者提供有力帮助(电商API接口大全,封装接口:商品详情,视频详情,订单详情等)
    为开发者提供有力帮助的电商API接口大全API接口接入(taobao2024api)及封装接口介绍如下:一、电商API接口大全在电商领域,API接口是开发者与电商平台进行交互的桥梁。以下是一些常见的电商API接口及其功能:支付接口:如支付宝支付、微信支付、银联支付等,用于实现电商平台的支付功能......
  • 生产实习Day4 ---- 电商日志数据分析(问题1--统计页面浏览量(每行记录就是一次浏览))
    文章目录项目需求整体架构流程数据集实验步骤代码WebLogPVMapper.javaWebLogPvReducer.javaWebLogPVMapReduce.java代码细节WebLogPVMapper.java详细解释WebLogPvReducer.java详细解释WebLogPVMapReduce.java详细解释项目需求根据电商日志文件,分析:统计页面浏览......
  • JUC及多线程,线程安全
    JUC及多线程返回到Java开发知识汇总目录@程序员猴哥1.什么是JUCjava.util.concurrent:核心并发工具类。java.util.concurrent包含了许多线程安全,测试良好,高性能的并发模块。创建java.util.concurrent的目的就是要实现Collection框架对数据结构所执行的并发操作。核心......
  • Day4—电商日志数据分析
    项目要求:根据电商日志文件,分析:1.统计页面浏览量(每行记录就是一次浏览)2.统计各个省份的浏览量(需要解析IP)3.日志的ETL操作(ETL:数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程)为什么要ETL:没有必要解析出所有数据,只需要解析出有价值的字段即可。......
  • 抖音小红书淘宝拼多多商家订单对接ERP|获取电商平台订单信息(商家授权)
     custom-自定义API操作 支持抖音拼多多淘宝小红书公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认yes,将......
  • 揭秘电商高效运营:一键获取1688店铺商品列表的API秘籍
    1688平台是阿里巴巴集团旗下的B2B电子商务网站,为商家提供了一个庞大的商品交易市场。对于需要自动化获取商品信息的商家和开发者来说,1688提供了API接口服务。数据精确获取:提供店铺商品的详细信息。自动化操作:减少人工干预,提高工作效率。参数自定义:用户可根据需求设定查询参......
  • # RocketMQ 实战:模拟电商网站场景综合案例(二)
    RocketMQ实战:模拟电商网站场景综合案例(二)===========================================================一、SpringBoot整合Dubbo:dubbo概述1、dubbo概述Dubbo:是阿里巴巴公司开源的一款高性能、轻量级的JavaRPC框架,它提供了三大核心能力:面向接口的远程方法调用......