You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将新冠疫情数据存入Map<String, Map<LocalDate, List>>嵌套结构

你现有代码的核心问题有两点:

  • 所有国家共用了同一个innerMap实例,这就导致任意一个国家的日期数据修改都会同步影响所有国家,最终所有国家的内容完全一致
  • 仅完成了Map结构的初始化,没有把covidConfirmedList里的实际确诊数值填充到对应位置

正确实现方案

首先需要先处理表头提取日期序列,再逐行处理每个国家的数据,每一行单独生成对应国家的日期Map,参考实现如下:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.IntStream;

public class CovidDataProcessor {
    public static void main(String[] args) {
        // 你的输入数据 covidConfirmedList 填充逻辑保持不变
        List<List<String>> covidConfirmedList = new ArrayList<>();
        
        // 定义日期格式转换器,匹配输入中的 M/d/yy 格式
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M/d/yy");
        Map<String, Map<LocalDate, List<Integer>>> dataMap = new LinkedHashMap<>();
        
        // 第一步:提取表头的日期列表,前4列是省、国家、纬度、经度,从索引4开始是日期
        List<String> header = covidConfirmedList.get(0);
        List<LocalDate> dateList = IntStream.range(4, header.size())
                .mapToObj(i -> LocalDate.parse(header.get(i).trim(), dateFormatter))
                .toList();
        
        // 第二步:从第二行开始遍历每个国家的数据
        IntStream.range(1, covidConfirmedList.size())
                .forEach(rowIdx -> {
                    List<String> row = covidConfirmedList.get(rowIdx);
                    // 提取国家名,索引1的位置是国家/地区字段
                    String country = row.get(1).trim();
                    // 每个国家单独创建内部Map,禁止多国家共用同一个Map实例
                    Map<LocalDate, List<Integer>> countryDateMap = new LinkedHashMap<>();
                    // 遍历日期填充对应单日确诊数值
                    IntStream.range(0, dateList.size())
                            .forEach(dateIdx -> {
                                LocalDate date = dateList.get(dateIdx);
                                // 日期对应的数值在当前行的 4+dateIdx 位置,转为Integer类型
                                Integer confirmedNum = Integer.parseInt(row.get(4 + dateIdx).trim());
                                // 按需求存储为单元素List
                                countryDateMap.put(date, Collections.singletonList(confirmedNum));
                            });
                    // 把当前国家的日期数据存入总Map
                    dataMap.put(country, countryDateMap);
                });
        
        // 输出验证,结果和你给出的预期完全一致
        dataMap.forEach((country, dateMap) -> {
            System.out.println(country + " --> " + dateMap);
        });
    }
}

内容的提问来源于stack exchange,提问作者mike kong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:36:04