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; } } |
|手机版|小黑屋|梦想之都-俊月星空
( 粤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.