繁体   English   中英

Map 一个 CSV 元素到使用 OpenCsv 的字符串列表?

[英]Map a CSV element to a list of strings using 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;
}

所以这个 object 中的所有字段都是不同类型的,尤其是最后一个,它是列表类型,并且可以是任何非零长度。 这是我的代码 map 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM