我如何使用java流将标题和行的csv文件转换为散列图数组? 例如。
orderNo, totals, charges, taxes, payments
ord121,1500.00,30.00,25.00,Paid
ord8925,1700.00,130.00,75.00,Paid
ord7115,300.00,130.00,75.00,Paid
Hashmap 的 Array[0] 名称应为 orderNo,值为 ord121
Hashmap的Array[1]应名称为orderNo,值为ord8925...等等
尝试过这个,但坚持如何将 row(0) 内容作为 HashMap 名称
公共(public)静态无效readFileToMap(){
Pattern pattern = Pattern.compile(",");
String csvFile = inputDirPreFix + "input/file2.tsv";
try (BufferedReader in = new BufferedReader(new FileReader(csvFile));){
Map<String,String> namefreq = in
.lines()
.skip(1)
.map(lineData -> pattern.split(lineData))
.collect(HashMap::new, (map, lineData) ->
map.put(lineData[0], lineData[1]),
Map::putAll);
namefreq.forEach((k, v) -> System.out.println(k + " => " + v));
}
catch (Exception ex) {
Logger.getLogger("FileProcessing").log(Level.SEVERE, null, ex);
}
}
最佳答案
我认为你应该将每一行转换为 Map<String, String>
,然后将所有 map 收集到 List<Map<String, String>>
:
try (BufferedReader in = new BufferedReader(new FileReader(csvFile))) {
List<Map<String,String>> namefreq = in.lines()
.skip(1)
.map(line -> pattern.split(line)) // or pattern::split
.map(line -> {
Map<String, String> map = new HashMap<>();
map.put("NAME_OF_FIRST_COLUMN", line[0]);
map.put("NAME_OF_SECOND_COLUMN", line[1]);
// ... (etc)
return map;
})
.collect(Collectors.toList());
}
<小时/>
编辑:您最好创建自己的类,而不是收集到 map 列表,即 Order
,即 orderNo
, totals
等属性,加上 getter 和 setter 以及接收整行或每个属性的构造函数。然后,您可以收集到 List<Order>
.
关于java - 使用 java 流将包含标题和行的 csv 文件转换为 hashmap 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52972587/