java - 使用 OpenCsv 将 CSV 元素映射到字符串列表?

标签 java csv opencsv

我有一个由单个空格字符分隔的 CSV 文件,就像这样-

<HEADING ROW>
a b c,d,e,f
m n o,p,q

在这里,最后一个元素是用逗号分隔符连接的字符串列表。我目前正在使用 OpenCsv 库将此 CSV 文件解析为 POJO 列表。

这是我的 POJO 定义:

import com.opencsv.bean.CsvBindByName;

import java.util.List;

public class Foo {

    @CsvBindByName(column = "heading1", required = true)
    private Long first;

    @CsvBindByName(column = "heading2", required = true)
    private String third;

    @CsvBindByName(column = "heading3", required = true)
    private List<String> fourth;
}

所以这个对象中的所有字段都是不同类型的,尤其是最后一个,是列表类型,可以是任意非零长度。 这是我将 CSV 文件映射到这些对象列表的代码:

    public List<Foo> readCsvFromPath(final String filePath) throws IOException {
        try (Reader reader = Files.newBufferedReader(Paths.get(filePath));) {
            CsvToBean<Foo> csvToBean = new CsvToBeanBuilder<Foo>(reader)
                    .withSeparator(' ')
                    .withType(Foo.class)
                    .build();
            return csvToBean.parse();
        }
    }

我在这里不确定的是 CSV 文件的最后一个元素,即“c,d,e,f”或“o,p,q”如何分别映射到列表,如 {"c", "d", "e", "f"}{"o", "p", "q"}?

最佳答案

您可以使用 @CsvBindAndSplitByName .

替换这段代码

@CsvBindByName(column = "heading3", required = true)
private List<String> fourth;

@CsvBindAndSplitByName(column = "heading3", required = true, elementType = String.class, splitOn = ",")
private List<String> fourth;

关于java - 使用 OpenCsv 将 CSV 元素映射到字符串列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62206259/

相关文章:

java - Hadoop map-reducer 没有写入任何输出

python - 使用 pandas 从 csv 文件中读回元组

java - 垂直书写列而不是水平书写

java - 导出 CSV 的格式真的很奇怪

java - 更新语句上的 odbc 驱动程序语法错误

java - 基于中间件的 HTTP/JMS 混合 SOAP 的请求-回复模型

java - 将 ByteBuffer 分配一个位置是否存在性能问题?

Java - 无法读取 ØÖ(特殊字符)并打印它

Python 嵌套 for-in 循环 - 最外层循环不迭代

java - 线程 "main"org.openqa.selenium.ElementNotVisibleException : Element is not currently visible and so may not be interacted with 中出现异常