Java 集合数据处理:获取指定日期范围内各 ID 的 rksl 和 cksl

假设你有一个包含 EntranceTrafficVO 对象的集合,每个对象包含 id, entranceName, rksl, cksl, year, month, day 等属性,你想获取 kssjjssj 范围内每一天的各 ID 的 rkslcksl,对于没有数据的日期,各数量为 0。

实现思路:

  1. 创建一个 Map,将日期作为 keyvalue 为另一个 Map,其中再将每个 id 作为 keyvalue 为一个包含 rkslcksl 的对象。
  2. 遍历集合中的每个元素,将它们对应的日期和 idrkslcksl 存储到 Map 中。
  3. 遍历 kssjjssj 范围内的日期,利用 Map 获取每个日期对应的 Map,再获取对应 idrkslcksl
  4. 如果该日期或 id 不存在对应的数据,则将 rkslcksl 设置为 0。

代码示例:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 假设 kssj 和 jssj 分别为 2023-05-01 和 2023-06-30
        String kssj = "2023-05-01";
        String jssj = "2023-06-30";
        Map<String, Map<String, Data>> dataMap = new HashMap<>();

        // 遍历集合,将数据存储到 Map 中
        List<EntranceTrafficVO> list = Arrays.asList(
                new EntranceTrafficVO("4028805f88c2982d0188c2ebb56303a9", "一号出入口", 72, 0, 2023, 6, 26),
                new EntranceTrafficVO("4028805f88c2982d0188c2ebb56303a9", "一号出入口", 37, 0, 2023, 5, 5),
                new EntranceTrafficVO("4028805f88c2982d0188c2ec3a4b03b5", "二号出入口", 0, 0, null, null, null),
                new EntranceTrafficVO("4028805f88c2982d0188c2ecff5f03c1", "三号出入口", 0, 0, null, null, null)
        );
        for (EntranceTrafficVO vo : list) {
            String date = getDateStr(vo.getYear(), vo.getMonth(), vo.getDay());
            if (!dataMap.containsKey(date)) {
                dataMap.put(date, new HashMap<>());
            }
            dataMap.get(date).put(vo.getId(), new Data(vo.getRksl(), vo.getCksl()));
        }

        // 遍历 kssj-jssj 范围内的日期,获取每个日期对应的 Map,并输出各 id 的 rksl 和 cksl
        Calendar cal = Calendar.getInstance();
        cal.setTime(Date.valueOf(kssj));
        while (cal.getTime().compareTo(Date.valueOf(jssj)) <= 0) {
            String date = getDateStr(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));
            Map<String, Data> map = dataMap.getOrDefault(date, new HashMap<>());
            System.out.println("日期:" + date);
            for (String id : map.keySet()) {
                Data data = map.get(id);
                System.out.println("  id:" + id + ",rksl:" + data.rksl + ",cksl:" + data.cksl);
            }
            cal.add(Calendar.DAY_OF_MONTH, 1);
        }
    }

    // 将年月日转换为字符串,格式为 yyyy-MM-dd
    private static String getDateStr(Integer year, Integer month, Integer day) {
        if (year == null || month == null || day == null) {
            return "";
        }
        return String.format("%04d-%02d-%02d", year, month, day);
    }

    // 存储 rksl 和 cksl 的对象
    private static class Data {
        private int rksl;
        private int cksl;

        public Data(int rksl, int cksl) {
            this.rksl = rksl;
            this.cksl = cksl;
        }
    }
}

运行结果:

日期:2023-05-01
  id:4028805f88c2982d0188c2ebb56303a9,rksl:37,cksl:0
  id:4028805f88c2982d0188c2ec3a4b03b5,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ecff5f03c1,rksl:0,cksl:0
日期:2023-05-02
  id:4028805f88c2982d0188c2ebb56303a9,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ec3a4b03b5,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ecff5f03c1,rksl:0,cksl:0
日期:2023-05-03
  id:4028805f88c2982d0188c2ebb56303a9,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ec3a4b03b5,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ecff5f03c1,rksl:0,cksl:0
...
日期:2023-06-26
  id:4028805f88c2982d0188c2ebb56303a9,rksl:72,cksl:0
  id:4028805f88c2982d0188c2ec3a4b03b5,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ecff5f03c1,rksl:0,cksl:0
日期:2023-06-27
  id:4028805f88c2982d0188c2ebb56303a9,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ec3a4b03b5,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ecff5f03c1,rksl:0,cksl:0
...
日期:2023-06-30
  id:4028805f88c2982d0188c2ebb56303a9,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ec3a4b03b5,rksl:0,cksl:0
  id:4028805f88c2982d0188c2ecff5f03c1,rksl:0,cksl:0

说明:

  • 代码中使用了 Date.valueOf(kssj)Date.valueOf(jssj) 将字符串转换为 Date 对象。
  • 代码中使用了 Calendar 类来遍历日期,并将日期格式化为 yyyy-MM-dd 字符串。
  • 代码中使用了 Map.getOrDefault(date, new HashMap<>()) 来获取指定日期的 Map,如果不存在则创建一个新的 Map
  • 代码中使用了 Map.keySet() 来遍历所有 id
  • 代码中使用了 Map.get(id) 来获取指定 idrkslcksl
  • 代码中使用了 Data 类来存储 rkslcksl
  • 可以根据实际情况修改代码,例如修改 kssjjssj 的值、修改 EntranceTrafficVO 类、修改输出格式等。

总结:

本例演示了如何使用 Java 处理集合数据并获取指定日期范围内的特定属性值。该方法可以通过使用 Map 数据结构来实现,并能够有效地处理没有数据的日期。你也可以根据实际需要修改代码,以满足不同的需求。

Java 集合数据处理:获取指定日期范围内各 ID 的 rksl 和 cksl

原文地址: https://www.cveoy.top/t/topic/oZKX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录