在Java8中,以简化的方式将映射元素正确写入CSV

在Java8中,以简化的方式将映射元素正确写入CSV,java,csv,java-8,hashmap,Java,Csv,Java 8,Hashmap,我有一张设计如下的国家地图: England=24 Spain=21 Italy=10 etc London=10 Manchester=5 Madrid=7 Barcelona=4 Roma=3 etc 然后,我有一个不同的citiesMap,其设计如下: England=24 Spain=21 Italy=10 etc London=10 Manchester=5 Madrid=7 Barcelona=4 Roma=3 etc 目前,我正在屏幕上打印这些结果: System.

我有一张设计如下的国家地图:

England=24
Spain=21
Italy=10
etc
London=10
Manchester=5
Madrid=7
Barcelona=4
Roma=3
etc
然后,我有一个不同的citiesMap,其设计如下:

England=24
Spain=21
Italy=10
etc
London=10
Manchester=5
Madrid=7
Barcelona=4
Roma=3
etc
目前,我正在屏幕上打印这些结果:

    System.out.println("\nCountries:");
    Map<String, Long> countryMap = countTotalResults(orderDataList, OrderData::getCountry);
    writeResultInCsv(countryMap);
    countryMap.entrySet().stream().forEach(System.out::println);

System.out.println("\nCities:\n");
    Map<String, Long> citiesMap = countTotalResults(orderDataList, OrderData::getCity);
    writeResultInCsv(citiesMap);
    citiesMap.entrySet().stream().forEach(System.out::println);

您的
resultMap.entrySet()
是一个
。然后将其转换为
,然后在此流上运行.map。因此,您提供的映射器需要将类型为
map.Entry
的对象映射到您喜欢的任何对象。但是您将convertToCSV方法传递给它,它映射字符串数组

您的代码尝试使用逗号(
收集器。连接(“,”
)进行连接,但所需的输出包含零个逗号

感觉有两件事正在发生:

  • 您从某个地方复制/粘贴了此代码,或者它是提供给您的,但您不知道这些代码的作用。我建议把这段代码分成几部分:把每一部分都拿出来,用它进行实验,直到你理解它,然后再把它重新组合起来,现在你知道你在看什么了。此时,您将知道,使用
    收集器。在这种情况下加入(“,”
    )毫无意义,并且您试图使用映射字符串数组的映射函数映射
    字符串、Long
    的条目,这显然不起作用

  • 你会知道所有这些东西,但你没有费心去看你的代码。这似乎有点令人惊讶,所以我不认为是这样。但是如果是这样的话——你所拥有的代码与你想做的工作无关,那么你最好完全删除你的代码,把这个问题变成:“我有这个。我想要这个。我怎么做?”


  • 注意:列出
    key=value
    对的文本文件通常不称为CSV文件。

    我已经删除了编译错误,但无法将其写入CSV。CSV文件已正确创建,但未向我写入字符。拜托,你能帮个忙吗?完成后,你有没有在printwriter上调用.close()?