【问题标题】:Write HashMap to Csv File将 HashMap 写入 CSV 文件
【发布时间】:2018-11-15 01:26:04
【问题描述】:

我有一个带有 String 键和 List(String) 作为值的哈希图。

例如:

Key | Values
John | GroupName1,GroupName2,GroupName3
Nick | Groupname4,GroupName1

我想将此哈希图写入 csv 文件,以便我的 csv 文件包含如下行:

John,GroupName1,GroupName2,GroupName3    
Nick,Groupname4,GroupName1

我试过了:

Map<String, List<String>> usersmap = (Map<String, List<String>>) model.get("users"); //this is my map
StringWriter output = new StringWriter();
ICsvListWriter listWriter;
listWriter = new CsvListWriter(output, CsvPreference.STANDARD_PREFERENCE);
for (Map.Entry<String, List<String>> entry : usersmap.entrySet()) {
    listWriter.write(entry.getKey(), entry.getValue());
}

但这对我来说似乎不对。

【问题讨论】:

  • 你能指定“似乎不正确”吗?
  • 您是否收到任何错误消息?
  • 当然可以。我的意思是 listWriter.write 可以接受一个 String -->key 和一个 List --> entry.getValue() 作为参数?或者我需要传递两个字符串?我的问题是 List
  • 问题是你打破了 CSV 概念。键应该是文件的标题,值应该是键下的行。你为什么不直接使用 OutputStreamWriter 来制作你想要的东西?
  • 在 CsvListWriter 类的文档中,我发现:write(String... columns) -->将字符串数组写入 CSV 文件的列。所以,如果我在循环中创建一个新列表并将键和值“合并”为一个新的 List ,它会起作用吗?

标签: java csv hashmap supercsv


【解决方案1】:

尝试使用String.join(...)将您的列表转换为逗号分隔的字符串

listWriter.write(entry.getKey(), String.join(",", entry.getValue());

Java 文档:

https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#join-java.lang.CharSequence-java.lang.Iterable-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多