我如何使用Java流将头文件和行的csv文件转换为hashmap数组? 例如。
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的数组[0]的名称应为orderNo,值应为ord121
Hashmap的Array [1]的名称应为orderNo,值应为ord8925 ...等
尝试过此操作,但坚持如何使行(0)内容作为哈希图名称
公共静态无效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);
}
}
答案 0 :(得分:1)
我认为您应该将每一行转换为Map<String, String>
,然后将所有地图收集到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());
}
编辑:最好不要创建自己的类,即Order
,并使用orderNo
,totals
等属性,以及获取方法,而不是收集到地图列表setter和一个构造函数来接收整行,或者可能接收每个属性。然后,您可以收集到List<Order>
。
答案 1 :(得分:0)
暂时没有流管理...
[Tag1, Tag1, Tag1, Tag5, Tag5, Tag6, Tag6]