京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

按日期汇总数据并排序

2025-7-23 16:25| 发布者: zhaojun917| 查看: 8| 评论: 0

摘要: import java.util.*;import java.util.stream.Collectors;// 汇总实体类(同上)class DailySummary { private int custSuccSum; private int custUnSum; private int mailSuccSum; private int mailUnSum; pub ...
 import java.util.*;
import java.util.stream.Collectors;

// 汇总实体类(同上)
class DailySummary {
    private int custSuccSum;
    private int custUnSum;
    private int mailSuccSum;
    private int mailUnSum;

    public DailySummary() {
        this.custSuccSum = 0;
        this.custUnSum = 0;
        this.mailSuccSum = 0;
        this.mailUnSum = 0;
    }

    public void accumulate(int custSucc, int custUn, int mailSucc, int mailUn) {
        this.custSuccSum += custSucc;
        this.custUnSum += custUn;
        this.mailSuccSum += mailSucc;
        this.mailUnSum += mailUn;
    }

    public DailySummary combine(DailySummary other) {
        this.custSuccSum += other.custSuccSum;
        this.custUnSum += other.custUnSum;
        this.mailSuccSum += other.mailSuccSum;
        this.mailUnSum += other.mailUnSum;
        return this;
    }

    public int getCustSuccSum() { return custSuccSum; }
    public int getCustUnSum() { return custUnSum; }
    public int getMailSuccSum() { return mailSuccSum; }
    public int getMailUnSum() { return mailUnSum; }
}

public class SortSummaryMap {
    public static void main(String[] args) {
        // 1. 准备示例数据并生成summaryMap(同之前的逻辑)
        List<Map<String, Object>> dataList = new ArrayList<>();
        // 添加示例数据(printdate包含"8"、"12"、"10"等,测试排序)
        dataList.add(createDataMap("12", 1, 2, 1, 2));
        dataList.add(createDataMap("12", 3, 1, 2, 1));
        dataList.add(createDataMap("8", 2, 3, 1, 4));
        dataList.add(createDataMap("10", 5, 1, 3, 2));

        // 生成未排序的summaryMap
        Map<String, DailySummary> summaryMap = dataList.stream()
                .filter(map -> map.get("printdate") != null)
                .collect(Collectors.groupingBy(
                        map -> map.get("printdate").toString(),
                        Collector.of(
                                DailySummary::new,
                                (summary, map) -> summary.accumulate(
                                        getIntValue(map, "custSuccSum"),
                                        getIntValue(map, "custUnSum"),
                                        getIntValue(map, "mailSuccSum"),
                                        getIntValue(map, "mailUnSum")
                                ),
                                DailySummary::combine
                        )
                ));

        // 2. 按printdate排序:转换为TreeMap
        // 情况1:printdate是纯数字字符串(如"8"、"10"、"12"),需按数值大小排序
        Map<String, DailySummary> sortedMap = new TreeMap<>(
            Comparator.comparingInt(Integer::parseInt)  // 自定义比较器:按数值排序
        );
        sortedMap.putAll(summaryMap);  // 将原Map数据放入TreeMap,自动排序

        // 情况2:若printdate是日期字符串(如"2023-10-08"),直接用自然排序即可
        // Map<String, DailySummary> sortedMap = new TreeMap<>(summaryMap);

        // 3. 遍历排序后的Map
        System.out.println("按printdate从小到大排序结果:");
        sortedMap.forEach((printdate, summary) -> {
            System.out.println("printdate=" + printdate + ":");
            System.out.println("  客户成功总数:" + summary.getCustSuccSum());
            System.out.println("  客户失败总数:" + summary.getCustUnSum());
            System.out.println("  邮件成功总数:" + summary.getMailSuccSum());
            System.out.println("  邮件失败总数:" + summary.getMailUnSum());
            System.out.println("-------------------");
        });
    }

    // 工具方法:创建数据Map
    private static Map<String, Object> createDataMap(String printdate, int custSucc, int custUn, int mailSucc, int mailUn) {
        Map<String, Object> map = new HashMap<>();
        map.put("printdate", printdate);
        map.put("custSuccSum", custSucc);
        map.put("custUnSum", custUn);
        map.put("mailSuccSum", mailSucc);
        map.put("mailUnSum", mailUn);
        return map;
    }

    // 工具方法:获取int值
    private static int getIntValue(Map<String, Object> map, String key) {
        Object value = map.get(key);
        return value instanceof Integer ? (Integer) value : 0;
    }
}

关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-26 19:54 , Processed in 0.032306 second(s), 18 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部