我有一个包含500多个公司数据的.csv文件。文件中的每一行都是指向特定公司数据集的。我需要解析这个文件并从每个数据集中提取数据以调用4个不同的Web服务。
.csv文件的第一行包含列名。我正在尝试编写一个方法,它接受一个字符串参数,该参数与在.csv文件中找到的列标题相关联。
基于此参数,我希望该方法使用Java 8的Stream功能解析文件,并返回从每行/公司的列标题中获取的数据列表。
我觉得自己把它搞复杂了,但无法想到更有效的方式来实现我的目标。
任何想法或建议将不胜感激。
通过搜索stackoverflow,我发现了以下帖子,它类似但并不完全相同。 Parsing a CSV file for a unique row using the new Java 8 Streams API
public static List<String> getData(String titleToSearchFor) throws IOException{
Path path = Paths.get("arbitoryPath");
int titleIndex;
String retrievedData = null;
List<String> listOfData = null;
if(Files.exists(path)){
try(Stream<String> lines = Files.lines(path)){
List<String> columns = lines
.findFirst()
.map((line) -> Arrays.asList(line.split(",")))
.get();
titleIndex = columns.indexOf(titleToSearchFor);
List<List<String>> values = lines
.skip(1)
.map(line -> Arrays.asList(line.split(",")))
.filter(list -> list.get(titleIndex) != null)
.collect(Collectors.toList());
String[] line = (String[]) values.stream().flatMap(l -> l.stream()).collect(Collectors.collectingAndThen(
Collectors.toList(),
list -> list.toArray()));
String value = line[titleIndex];
if(value != null && value.trim().length() > 0){
retrievedData = value;
}
listOfData.add(retrievedData);
}
}
return listOfTitles;
}
感谢