将逗号分隔的文本文件读入HashMap,该文件在多行Java中具有相同的键

将逗号分隔的文本文件读入HashMap,该文件在多行Java中具有相同的键,java,Java,我试图从一个逗号分隔的文件中读取日期作为键,并将文件中的第一项作为值读取。但我的问题是,文件在多行中有相同的日期,当我试图将文件读入hashmap时,每个键都会得到额外的null值 文件中的数据如下所示 请参阅下面的代码,将数据从文件读入hashmap 例外结果为 {15/04/2018=1182800,14/04/2018=1182799,17/04/2018=1182802, 2018年4月18日=11828041182803,2018年4月16日=1182801,2018年4月13日=11

我试图从一个逗号分隔的文件中读取日期作为键,并将文件中的第一项作为值读取。但我的问题是,文件在多行中有相同的日期,当我试图将文件读入hashmap时,每个键都会得到额外的null值

文件中的数据如下所示

请参阅下面的代码,将数据从文件读入hashmap

例外结果为

{15/04/2018=1182800,14/04/2018=1182799,17/04/2018=1182802, 2018年4月18日=11828041182803,2018年4月16日=1182801,2018年4月13日=1182798}

实际结果是-我要排除的每个键都带有null

{15/04/2018=1182800,空,14/04/2018=1182799,空, 2018年4月17日=1182802,无效,2018年4月18日=11828041182803,无效, 2018年4月16日=1182801,空,2018年4月13日=1182798,空}


写下以下内容就足够了:

lines.stream.filterline->line.containsdelimiter.forEachline->map.putline.splitdelimiter[3], line.splitdelimiter[0]; 您可能还想用org.apache.commons.collections.map.MultiValueMap等替换HashMap,这样可以在同一个键下存储多个值

因此:

Map Map=新的多值映射; 我在您的测试数据中添加了一行,现在日期18/04/2018出现了两次,输出如下
{15/04/2018=[1182800],14/04/2018=[1182799],18/04/2018=[1182803,1182804],16/04/2018=[1182801],13/04/2018=[1182798]}

我认为您只需要添加一个空值检查。下面是片段

map.put(line.split(delimiter)[3],map.get(line.split(delimiter)[3])==null?line.split(delimiter)[0]:
                    line.split(delimiter)[0] + "," + map.get(line.split(delimiter)[3])));

移除map.getline.splitdelimiter[3]@Hades,如果我移除这个。我的输出是{15/04/2018=1182800,14/04/2018=1182799,17/04/2018=1182802,18/04/2018=1182804,16/04/2018=1182801,13/04/2018=1182798},这明显缺少2018年4月18日的多个值。我尝试了以下几行:filterline->line.containsdelimiter.forEachline->map.putline.splitdelimiter[3],line.splitdelimiter[0];我得到了这个输出{15/04/2018=1182800,14/04/2018=1182799,17/04/2018=1182802,18/04/2018=1182804,16/04/2018=1182801,13/04/2018=1182798},其中键18/04/2018缺少了一个值。是的,键=value1,value2类似的东西或您显示的东西对我来说也很好。谢谢,它成功了。”{15/04/2018=[1182800],14/04/2018=[1182799],17/04/2018=[1182802],18/04/2018=[1182803,1182804],16/04/2018=[1182801],13/04/2018=[1182798]}'这是输出。我只定义org.apache.commons.collections.map.MultiValueMap=new org.apache.commons.collections.map.MultiValueMap;它仍然有效。是的,它仍然有效,但不要这样做。最好使用Map作为引用类型,因为如果您想交换实现,就像在我们的例子中一样,这会更容易。
String filePath = "electric-enhanced_0000_201804130555.txt";
    String delimiter = ",";
    HashMap<String, String> map = new HashMap<>();

    try (Stream<String> lines = Files.lines(Paths.get(filePath)).skip(1)) {
        lines.filter(line -> line.contains(delimiter)).forEach(line -> map.put(line.split(delimiter)[3],
                line.split(delimiter)[0] + "," + map.get(line.split(delimiter)[3])));
    }

    System.out.println(map);
map.put(line.split(delimiter)[3],map.get(line.split(delimiter)[3])==null?line.split(delimiter)[0]:
                    line.split(delimiter)[0] + "," + map.get(line.split(delimiter)[3])));