如何使用java streams将包含头和行的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
哈希映射数组的名称应为orderNo,值应为ord121
Hashmap的名称应为orderNo,值应为ord8925...诸若此类
我尝试过,但在如何将行(0)内容作为hashmap名称的问题上遇到了困难
公共静态空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);
}
}
发布于 2018-10-26 00:02:09
暂时不使用流进行管理...
public static void readFileToMap() {
String csvFile = inputDirPreFix + "input/file2.tsv";
String [] strArrHeaderFields =new String [20] ;
HashMap objDataHashMap ;
HashMap <Integer,Object> objAggregateData = new HashMap(); ;
String [] strArrValues = new String[20];
try {
List<String> fileLinesList = Files.readAllLines(Paths.get(csvFile));
strArrHeaderFields =fileLinesList.get(0).split(",");
//System.out.println( Arrays.toString(objHeaderFields) );
//skip header line and collect data lines in hashmap with Name as Header line values..
// for every data line,
for( int i=1; i< fileLinesList.size(); i ++) {
objDataHashMap = new HashMap();
//get values from each data line
strArrValues =fileLinesList.get(i).split(",");
for( int j=0; j< strArrHeaderFields.length; j++) {
objDataHashMap.put(strArrHeaderFields[j], strArrValues[j]);
}
//System.out.println( "objDataHashMap Count of Records ...." + objDataHashMap.size() );
objAggregateData.put(i,objDataHashMap);
}
System.out.println( "objAggregateData Count of Records ...." + objAggregateData.size() );
objAggregateData.forEach((k,v) -> {
System.out.println(k + " : " + v );
});
} catch (Exception ex) {
Logger.getLogger("FileProcessing").log(Level.SEVERE, null, ex);
}
}
https://stackoverflow.com/questions/52972587
复制相似问题