Java 使用第一行作为键,列值作为数组/列表,将csv转换为地图
我已将此格式数据转换为csv格式-Java 使用第一行作为键,列值作为数组/列表,将csv转换为地图,java,Java,我已将此格式数据转换为csv格式- 20017,20018,20019 10,20,30 20,30,40 所以我想用lambda表达式在下面格式的地图上画这个- Map<Integer,Double[]> = new HashMap<>(); [20017={10,20},20018={20,30}, 20019={30,40}] Map=newhashmap(); [20017={10,20},20018={20,30}, 20019={30,40}] 您的逻辑可
20017,20018,20019
10,20,30
20,30,40
所以我想用lambda表达式在下面格式的地图上画这个-
Map<Integer,Double[]> = new HashMap<>();
[20017={10,20},20018={20,30}, 20019={30,40}]
Map=newhashmap();
[20017={10,20},20018={20,30}, 20019={30,40}]
您的逻辑可能是这样的:
numberOfColumns
。把阵列放在一边列表
并将numberOfColumns
列表添加到外部列表中split(“,”
,并将每个值解析为Double
,并添加到相应的列列表中toArray()
将List
转换为Double[]
,并在步骤1中使用数组中的键构建最终的Map
try(BufferedReader BufferedReader=Files.newBufferedReader(path.get(“test.csv”)){
CSVParser parser=CSVFormat.RFC4180.withFirstRecordAsHeader().parse(bufferedReader);
Map hearders=parser.getHeaderMap();
映射数据=新的HashMap();
parser.getRecords().stream().forEach(rec->{
hearders.entrySet().forEach(head->{
computeIfAbsent(head.getKey(),k->newArrayList()).add(Double.parseDouble(rec.get(head.getValue()));
});
});
系统输出打印项次(数据);
}
一些提示:您面临哪些问题?读取文件?解析内容?绘制地图?到目前为止您尝试了什么?列出列;列表值;try(BufferedReader br=Files.newBufferedReader(path.get(“test.csv”)){String firstLine=br.readLine();if(firstLine==null)抛出新IOException(“空文件”);columns=Arrays.asList(firstLine.split(“,”);values=br.lines().map(line->Arrays.asList(line.split(“,”)).collect(Collectors.toList());System.out.println(列);System.out.println(值);我无法将第一行绑定为键,将其所有值绑定为list@ram不要在评论中发布代码。编辑问题并在那里显示您的代码,以便更好地格式化和可读。这是工作代码,请让我知道是否可以以更好的方式完成。
try(BufferedReader bufferedReader= Files.newBufferedReader(Paths.get("test.csv"))) {
CSVParser parser = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(bufferedReader);
Map<String,Integer> hearders = parser.getHeaderMap();
Map<String,List<Double>> data = new HashMap<>();
parser.getRecords().stream().forEach(rec -> {
hearders.entrySet().forEach( head ->{
data.computeIfAbsent(head.getKey(), k-> new ArrayList<>()).add(Double.parseDouble(rec.get(head.getValue())));
});
});
System.out.println(data);
}