日常编程总结

1. double值返回0.0与返回null

当所有值全为null时,相加需要返回null,而不是返回0.0

        List<Cats> lists = Lists.newArrayList();
//        lists.add(Cats.builder().name("1").age(6.66d).build());
//        lists.add(Cats.builder().name("2").age(0.235d).build());
//        lists.add(Cats.builder().name("3").age(null).build());

        lists.add(Cats.builder().name("1").age(null).build());
        lists.add(Cats.builder().name("2").age(null).build());
        lists.add(Cats.builder().name("3").age(null).build());

        double sum = lists.stream().filter(i -> Objects.nonNull(i.getAge())).mapToDouble(Cats::getAge).sum();
        System.out.println("Result sum: " + sum);

        OptionalDouble sumOptional = lists.stream().filter(i -> Objects.nonNull(i.getAge()))
                .mapToDouble(Cats::getAge).reduce(Double::sum);
        Double result = sumOptional.isPresent() ? sumOptional.getAsDouble() : null;
        System.out.println("Result sum: " + result);
Result sum: 0.0
Result sum: null

2. 日期格式标准化

输入日期不是yyyy-MM-dd,转成yyyy-MM-dd

        String dateString1 = "2023-1-5";
        String dateString2 = "2023-11-5";
        String dateString3 = "2023-1-15";
        String dateString4 = "2023-11-15";
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d");
        try {
            Date parse1 = dateFormat.parse(dateString1);
            Date parse2 = dateFormat.parse(dateString2);
            Date parse3 = dateFormat.parse(dateString3);
            Date parse4 = dateFormat.parse(dateString4);
            dateFormat.applyPattern("yyyy-MM-dd");
            System.out.println(dateFormat.format(parse1));
            System.out.println(dateFormat.format(parse2));
            System.out.println(dateFormat.format(parse3));
            System.out.println(dateFormat.format(parse4));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
2023-01-05
2023-11-05
2023-01-15
2023-11-15

3. stream流add操作

按照id分组,对id一样的数据相加,存放于map

    @Test
    public void test() {
        List<AdminOrgInfo> adminOrgInfoList = new ArrayList<>();
        BigDecimal b1 = new BigDecimal(1);
        BigDecimal b2 = new BigDecimal(2);
        BigDecimal b3 = new BigDecimal(3);
        BigDecimal b4 = new BigDecimal(4);
        AdminOrgInfo c1 = new AdminOrgInfo("a1", b1);
        AdminOrgInfo c2 = new AdminOrgInfo("a1", b2);
        AdminOrgInfo c3 = new AdminOrgInfo("a2", b3);
        AdminOrgInfo c4 = new AdminOrgInfo("a2", b4);
        adminOrgInfoList.add(c1);
        adminOrgInfoList.add(c2);
        adminOrgInfoList.add(c3);
        adminOrgInfoList.add(c4);
        Map<String, BigDecimal> collect = adminOrgInfoList.stream().collect(toMap(AdminOrgInfo::getId, AdminOrgInfo::getNum, BigDecimal::add));
        System.out.println(collect);
    }

@Data
@AllArgsConstructor
class AdminOrgInfo {
    private String id;
    private BigDecimal num;
}

3. stream流list合并

stream中map返回的是一个list,返回值合并为list,使用flatMap

        List<Statuss> lists=new ArrayList<>();
        List<Integer> list=new ArrayList<>();
        list.add(66);
        list.add(33333);
        Statuss statuss=new Statuss();
        statuss.setName("aa");
        statuss.setAge(list);
        List<Integer> collect=lists.stream().map(Statuss::getAge).flatMap(Collection::stream).collect(toList());


@Data
class Statuss {
    private String name;
    private List<Integer> age;
}

4. stream流实现对list分组

4.1 取余的方式分组

        List<String> originalList = Arrays.asList("元素1", "元素2", "元素3", "元素4", "元素5");
        int limit = 4;
        List<List<String>> res = originalList.stream()
                .collect(Collectors.collectingAndThen(
                        Collectors.groupingBy(element -> originalList.indexOf(element) % limit),
                        map -> new ArrayList<>(map.values())
                ));
        System.out.println(res);

输出:
[[元素1, 元素5], [元素2], [元素3], [元素4]]

4.2 分页的方式分组

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
        int MAX_NUMBER = 3;
        int limit = (list.size() + MAX_NUMBER - 1) / MAX_NUMBER;
        List<List<Integer>> splitList = Stream.iterate(0, n -> n + 1)
                .limit(limit)
                .map(a -> list.stream().skip(a * MAX_NUMBER).limit(MAX_NUMBER).collect(Collectors.toList()))
                .collect(Collectors.toList());
        System.out.println(splitList);
        
输出:
[[1, 2, 3], [4, 5, 6], [7]]

5. 获取当天的GMT 0点时间

        ZoneId zoneId = ZoneId.of("GMT+8");
        ZonedDateTime now = ZonedDateTime.now(zoneId);
        LocalDate today = now.toLocalDate();
        Date todayGMTZeroTime = Date.from(today.atStartOfDay(zoneId).toInstant());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值