【发布时间】:2018-04-04 21:22:22
【问题描述】:
我有一个 .csv 文件,其中包含 500 多家公司的数据。文件中的每一行都引用一个特定的公司数据集。我需要解析这个文件并推断每个文件的数据以调用 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;
}
谢谢
【问题讨论】:
-
你的代码有很多问题,你编译了吗?
-
是的,我在eclipse中编译过,没有任何编译错误。我目前无权访问 csv 文件,因此还无法正确测试。
标签: java csv java-8 java-stream