Apache Commons CSV:如何将单条记录转为多元素列表?
问题分析
你现在遇到的情况很直观:你用CSVFormat.DEFAULT把{"cool", "nice", 5}这个数组格式化成了一行CSV记录(也就是类似cool,nice,5这样的字符串),所以解析后得到的CSVParser自然只会返回1个CSVRecord对象——这就是你看到"仅返回1条记录"的原因。而你真正需要的,是把这条单记录里的三个字段提取出来,组成一个列表。
解决方案
直接从返回的第一条CSVRecord中提取字段即可,CSVRecord提供了toList()方法,可以把当前记录的所有字段转换成List<String>:
CSVFormat format = CSVFormat.DEFAULT; // 解析格式化后的CSV字符串 CSVParser parser = CSVParser.parse(format.format(new Object[]{"cool", "nice", 5}), format); // 获取第一条记录并转成字段列表 List<String> resultList = parser.getRecords().get(0).toList(); return resultList;
额外的健壮性优化
如果担心解析后可能没有记录(虽然你的场景里不太可能),可以加个空判断避免索引越界:
CSVFormat format = CSVFormat.DEFAULT; CSVParser parser = CSVParser.parse(format.format(new Object[]{"cool", "nice", 5}), format); List<CSVRecord> records = parser.getRecords(); if (!records.isEmpty()) { return records.get(0).toList(); } // 无记录时返回空列表,根据你的需求调整 return Collections.emptyList();
更直接的替代方案(如果场景允许)
如果你的需求只是把这个Object数组转换成字符串列表,其实完全不需要绕CSV的流程,直接用Java流处理更高效:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; // ... return Arrays.stream(new Object[]{"cool", "nice", 5}) .map(Object::toString) .collect(Collectors.toList());
内容的提问来源于stack exchange,提问作者Ilya Gazman
相关产品推荐
相关产品推荐

