CSV文件按第17列分组后输出异常的问题求助及解决
问题:CSV分组后输出异常的
[Ljava.lang.String;@xxxxxx内容 我在读取CSV文件时,希望按第17列对记录进行分组,将每个键对应的所有行以列表/数组形式展示,但得到了一堆类似[Ljava.lang.String;@7a46a697的异常输出。
原代码
void read_CSV_file(String path ) { Stream<String > file_data_by_lines = null; try { file_data_by_lines = Files.lines(Paths.get(path)) ; } catch (IOException e) { e.printStackTrace(); } Map temp =file_data_by_lines.map(x-> (x.split(","))) .collect( Collectors.groupingBy(x-> x[17], Collectors.toSet())); temp.values().stream().forEach(System.out::println); }
当前异常输出
[[Ljava.lang.String;@7a46a697, [Ljava.lang.String;@6d86b085, [Ljava.lang.String;@68f7aae2, [Ljava.lang.String;@4141d797, [Ljava.lang.String;@5f205aa, [Ljava.lang.String;@7530d0a, [Ljava.lang.String;@2a3046da, [Ljava.lang.String;@75828a0f, [Ljava.lang.String;@2f410acf] [[Ljava.lang.String;@2401f4c3, [Ljava.lang.String;@3b6eb2ec, [Ljava.lang.String;@2d363fb3, [Ljava.lang.String;@21bcffb5, [Ljava.lang.String;@566776ad, [Ljava.lang.String;@34c45dca, [[Ljava.lang.String;@1d251891, [Ljava.lang.String;@1edf1c96] [[Ljava.lang.String;@28f67ac7, [Ljava.lang.String;@129a8472]
问题原因
出现这种输出是因为Java中数组的默认toString()方法不会打印数组内容,而是返回数组的对象标识(哈希码)。你的分组结果中,每个值都是String[]的集合,直接调用System.out::println打印这些数组时,就会输出这种看起来像乱码的格式。
解决方法
使用Arrays.deepToString()方法将数组转换为可读的字符串格式,修改遍历输出的代码即可:
temp.values().stream().forEach(x-> System.out.println(Arrays.deepToString(x.toArray())));
Arrays.deepToString()可以处理嵌套数组(这里虽然是一维数组,但该方法同样适用),会把数组中的元素逐一打印出来,得到清晰的分组内容。
内容的提问来源于stack exchange,提问作者Nil Kulkarni
相关产品推荐
相关产品推荐

