Java8特性Stream工作使用总结

1.Steam流 求取最大、最小、求和

        List<ElectricTotalHourReport> curve = electricTotalHourReportMapper.curve(paramterSo);
        BigDecimal max = curve.stream().map(ElectricTotalHourReport::getRecord).max(BigDecimal::compareTo).get();
        BigDecimal min = curve.stream().map(ElectricTotalHourReport::getRecord).min(BigDecimal::compareTo).get();

   BigDecimal energyCategorySum = energyCategory.stream()
                .map(ElectricDailyReport::getRecord)
                .reduce(BigDecimal.ZERO, BigDecimal::add);

2.Steam流 递归组建菜单树


    // 组建常规菜单树
    public List<SysMenu> sysMenuTree(List<SysMenu> sysMenuList) {
        //    获取一级菜单
        List<SysMenu> levelMenus_1 = sysMenuList.stream()
                .filter(sysMenu -> sysMenu.getParentId() == 0)
                .map((sysMenu) -> {
                    sysMenu.setChildren((getChildrens(sysMenu, sysMenuList)));
                    return sysMenu;
                })
                .collect(Collectors.toList());
        return levelMenus_1;
    }

    // 传入root节点,找到all子节点
    private List<SysMenu> getChildrens(SysMenu root, List<SysMenu> all) {
        List<SysMenu> children = all.stream()
                .filter(SysMenu -> {
                    return root.getMenuId().equals(SysMenu.getParentId());
                }).map(SysMenu -> {
                    //递归查找子菜单
                    SysMenu.setChildren(getChildrens(SysMenu, all));
                    return SysMenu;
                }).collect(Collectors.toList());
        return children;
    }

3.Steam流 转map

       Map<String, EnergyBuild> buildMap = SpringUtils.getBean(EnergyBuildMapper.class)
                .selectEnergyBuildList(new EnergyBuild())
                .stream().collect(Collectors.toMap(o->o.getId().toString(), o -> o));

4.Steam流转set

  Set<Long> dbSet = relationUserProjectMapper.selectRelationUserProjectList(new RelationUserProject(userId))
                .stream().map(RelationUserProject::getProjectId).collect(Collectors.toSet());

5.Steam流排序

userArrayList.sort(Comparator.comparingInt(User::getAge));

6.Steam流Match

  • anyMatch表示,判断的条件里,任意一个元素成功,返回true
  • allMatch表示,判断条件里的元素,所有的都是,返回true
  • noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true
  boolean b = stream.allMatch(userEntity -> "mayikt".equals(userEntity.getUserName()));

7.Steam流Filter

 stream.filter(userEntity -> "mayikt".equals(userEntity.getUserName()) && userEntity.getAge() > 18);

8.Steam流Skip、Limit

stream.skip(2).limit(3)

9.并行流,计算求和

 Instant start = Instant.now();
        LongStream longStream = LongStream.rangeClosed(0, 50000000000L);
        // 使用并行流 计算  五百亿求和耗费的时间为: 7324 7850 7
        OptionalLong result = longStream.parallel().reduce((left, right) -> left + right);
        //使用多线程 处理 大的任务拆分成n多小的任务 在计算 在将结果合并 fork join框架
        System.out.println(result.getAsLong());
        Instant end = Instant.now();
        System.out.println("五百亿求和耗费的时间为: " + Duration.between(start, end).toMillis());

10.Optional。

解决空指针问题,优化if,类中类字段不能为空,不便于理解,具体查看API。

   public static String getOrderName() {
        // 优化前写法:
        OrderEntity order = new OrderEntity("123456", "MAyikt");
//        if (order != null) {
//            String orderName = order.getOrderName();
//            if (orderName != null) {
//                return orderName.toLowerCase();
//            }
//        }
        return Optional.ofNullable(order).map(orderEntity -> orderEntity.getOrderName()).map(orderName ->
                orderName.toLowerCase()).orElse(null);
    }

11.删除List中的元素

list.removeIf(tzLyGroupRel -> existTzLyGroupRelMap.containsKey(tzLyGroupRel.getLyUserId()));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值