![](/img/trans.png)
[英]Convert List<Model> to List<String[]> Java for write to csv using 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.