excel导入时间问题与Steam流

时间适配

在Excel中编辑时间会导致时间格式不统一,因此可以进行适配解析

 /**
     * 适配Excel的时间
     */
    private static void testDateTranfer() {
        String[] dateStrings = {"2022/2/12", "2022/02/2", "2022/12/12", "2022/12/01"};

        // 定义日期格式解析器
        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .appendPattern("yyyy/")
                .optionalStart()
                .appendValue(ChronoField.MONTH_OF_YEAR, 1, 2, SignStyle.NEVER)
                .optionalEnd()
                .appendPattern("/")
                .appendValue(ChronoField.DAY_OF_MONTH, 1, 2, SignStyle.NEVER)
                .toFormatter();

        // 解析日期字符串并输出结果
        for (String dateString : dateStrings) {
            LocalDate date = LocalDate.parse(dateString, formatter);
            System.out.println("解析后的日期: " + date);
        }
    }

编号重复的情况下,怎么从List中根据编号进行分组,并且只获取其中修改时间最晚的那个数据

public class GroupAndFilter {
    public static void main(String[] args) {
        // 假设有一个List包含了一些数据
        List<Data> dataList = new ArrayList<>();
        dataList.add(new Data(1, LocalDateTime.of(2023, 8, 1, 10, 0, 0)));
        dataList.add(new Data(2, LocalDateTime.of(2023, 8, 1, 9, 0, 0)));
        dataList.add(new Data(1, LocalDateTime.of(2023, 8, 2, 11, 0, 0)));
        dataList.add(new Data(3, LocalDateTime.of(2023, 8, 2, 10, 0, 0)));
        dataList.add(new Data(3, LocalDateTime.of(2023, 8, 3, 8, 0, 0)));

       // 根据编号进行分组,并获取每组中修改时间最晚的数据
        Map<Integer, Data> latestDataByNumber = dataList.stream()
                .collect(Collectors.groupingBy(Data::getNumber,
                        Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(Data::getModifiedTime)),
                                Optional::get)));
//或者
        Map<Integer, Data> latestDataByNumber3 = dataList.stream()
                .collect(Collectors.toMap(Data::getNumber, Function.identity(), BinaryOperator.maxBy(Comparator.comparing(Data::getModifiedTime))));
        Map<Integer, Data> latestDataByNumber1 = dataList.stream().collect(Collectors.toMap(Data::getNumber,
                Function.identity(), (key1, key2) -> key1.getModifiedTime().compareTo(key2.getModifiedTime()) > 0 ? key1 : key2));
        // 输出结果
        latestDataByNumber.forEach((number, data) -> System.out.println("Number: " + number + ", Latest Data: " + data.getModifiedTime()));
        latestDataByNumber1.forEach((number, data) -> System.out.println("Number: " + number + ", Latest Data: " + data.getModifiedTime()));
        latestDataByNumber3.forEach((number, data) -> System.out.println("Number: " + number + ", Latest Data: " + data.getModifiedTime()));

    }

    static class Data {
        private int number;
        private LocalDateTime modifiedTime;

        public Data(int number, LocalDateTime modifiedTime) {
            this.number = number;
            this.modifiedTime = modifiedTime;
        }

        public int getNumber() {
            return number;
        }

        public LocalDateTime getModifiedTime() {
            return modifiedTime;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值