【性能优化】两种方案优化双层for循环语句 附代码和实例

您所在的位置:网站首页 双层落地衣架如何避免晃动 【性能优化】两种方案优化双层for循环语句 附代码和实例

【性能优化】两种方案优化双层for循环语句 附代码和实例

2024-07-13 19:10| 来源: 网络整理| 查看: 265

现有如下需求,需在订单信息类中根据用户信息类的userId匹配到对应的信息并输出商品skuId。

先给出实体类:用户信息类UserInfo和订单信息类OrderInfo。用户信息类如下所示:

/** * @author Carson Chu * @date 2020/1/13 19:43 * 用户信息类 */ @Data public class UserInfo { /* 用户Id */ private String userId; /* 用户名 */ private String name; /* 用户性别 */ private String gender; public UserInfo(String userId, String name, String gender) { this.userId = userId; this.name = name; this.gender = gender; } }

订单信息类如下:

/** * @author Carson Chu * @date 2020/1/13 19:44 * 订单信息类 */ @Data public class OrderInfo { /* 用户Id */ private String userId; /* 订单号 */ private Long orderId; /* 商品sku */ private Long skuId; /* 商品价格 */ private BigDecimal price; public OrderInfo(String userId, Long orderId, Long skuId, BigDecimal price) { this.userId = userId; this.orderId = orderId; this.skuId = skuId; this.price = price; } }

假设用户信息表和订单信息表中各有十万条数据,需要匹配到商品skuId,先采用双层for循环,附上main()方法逻辑:

/** * @author Carson Chu * @date 2020/1/13 20:09 */ public class Main { public static void main(String[] args) { /* 用户信息集合 */ List userInfoList = Lists.newArrayList(); /* 订单信息集合 */ List orderInfoList = Lists.newArrayList(); /* 手动向集合中添加十万条数据 */ for (int i = 0; i userInfo)); // 商品skuId集合 List skuIdList = Lists.newArrayList(); skuIdList = orderInfoList.stream().map(orderInfo -> { return getSkuId(userInfoMap.get(orderInfo.getUserId()), orderInfo); }).collect(Collectors.toList()); skuIdList.stream().forEach(skuId -> { System.out.println("商品skuId:" + skuId); }); long end = System.currentTimeMillis(); System.out.println("利用lambda表达式和stream流查询累计耗时:" + (end - start) + "毫秒");

附加匹配用户信息和订单信息的方法逻辑:

/** * 匹配用户信息和订单信息,成功匹配后返回用户对应的商品skuId * * @param userInfo * @param orderInfo * @return */ private static Long getSkuId(UserInfo userInfo, OrderInfo orderInfo) { if (orderInfo.getUserId().equals(userInfo.getUserId())) { return orderInfo.getSkuId(); } return null; }

在这里插入图片描述 如上图所示,耗时也是毫秒级的,和哈希效率相当,因为事实上这种stream流就是基于HashMap的。双层for循环和这两种方案相比,执行效率和用户体验上可谓是天差地别。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3