gpt4 book ai didi

java - 使用 HashMap 中的列和值创建 CSV 文件

转载 作者:行者123 更新时间:2023-12-02 09:14:59 28 4
gpt4 key购买 nike

温柔点,这是我第一次使用 Apache Commons CSV 1.7。

我正在创建一项服务来处理一些 CSV 输入,添加一些来自外部来源的附加信息,然后写出此 CSV 以便摄取到另一个系统中。

我将收集到的信息存储到一个列表中 HashMap<String, String>对于最终输出 csv 的每一行。 HashMap 包含<ColumnName, Value for column> .

我在使用 CSVPrinter 将 HashMap 的值正确分配到行时遇到问题。我可以将这些值连接成一个字符串,变量之间用逗号分隔;然而,这只是将整个字符串插入到第一列中。

我无法定义或硬编码 header ,因为它们是从配置文件获取的,并且可能会根据使用该服务的项目而变化。

这是我的一些代码:

try (BufferedWriter writer = Files.newBufferedWriter(
Paths.get(OUTPUT + "/" + project + "/" + project + ".csv"));)
{
CSVPrinter csvPrinter = new CSVPrinter(writer,
CSVFormat.RFC4180.withFirstRecordAsHeader());
csvPrinter.printRecord(columnList);

for (HashMap<String, String> row : rowCollection)
{
//Need to map __record__ to column -> row.key, value -> row.value for whole map.

csvPrinter.printrecord(__record__);
}

csvPrinter.flush();

}

感谢您的帮助。

最佳答案

您实际上对自己的技术有多种担忧;

  1. 如何保持列顺序?
  2. 如何打印列名称?
  3. 如何打印列值?

这是我的建议。

  1. 保持列顺序。不要使用HashMap,因为它是无序的。反而,使用具有“可预测迭代顺序”的 LinkedHashMap(即维持秩序)。

  2. 打印列名称。列表中的每一行都包含键值形式的列名称,但您只将列名称打印为输出的第一行。解决方案是在循环行之前打印列名称。从列表的第一个元素中获取它们。

  3. 打印列值。“billal GHILAS”答案演示了打印每行值的方法。

这是一些代码:

try (BufferedWriter writer = Files.newBufferedWriter(
Paths.get(OUTPUT + "/" + project + "/" + project + ".csv"));)
{
CSVPrinter csvPrinter = new CSVPrinter(writer,
CSVFormat.RFC4180.withFirstRecordAsHeader());

// This assumes that the rowCollection will never be empty.
// An anonymous scope block just to limit the scope of the variable names.
{
HashMap<String, String> firstRow = rowCollection.get(0);
int valueIndex = 0;
String[] valueArray = new String[firstRow.size()];

for (String currentValue : firstRow.keySet())
{
valueArray[valueIndex++] = currentValue;
}

csvPrinter.printrecord(valueArray);
}

for (HashMap<String, String> row : rowCollection)
{
int valueIndex = 0;
String[] valueArray = new String[row.size()];

for (String currentValue : row.values())
{
valueArray[valueIndex++] = currentValue;
}

csvPrinter.printrecord(valueArray);
}

csvPrinter.flush();
}

关于java - 使用 HashMap 中的列和值创建 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59070234/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com