【问题标题】:How to collect CSV row as array of strings using simpleflatmapper如何使用 simpleflatmapper 将 CSV 行收集为字符串数组
【发布时间】:2017-10-16 04:48:37
【问题描述】:

我正在尝试使用 simpleflatmapper 将 CSV 行收集为字符串数组:

try (Reader in = Files.newBufferedReader("path")) {
    return org.simpleflatmapper.csv.CsvParser
//  .mapTo(String[].class)
    .stream(in)
//  .parallel()
//  .flatMap(Arrays::stream)
    .map(line -> {return new ArrayList<>(Arrays.asList(line));})
//  .map(Arrays::asList)
    .collect(Collectors.toList());
} catch (Exception e) {
    e.printStackTrace();
}

在我调试时,lineString[],但值是整行(一个元素)而不是许多字符串(许多单元格)。如何获得单元格数组?

CSV 文件没有什么特别之处。例如:
a\t b\t 1\t 2
x\t y\t 3\t 4

我在这段代码.map(line -&gt; {return new ArrayList&lt;&gt;(Arrays.asList(line));}) 中看到的问题是line 包含一个字符串值,它是整行(带有制表符、空格等)而不是许多字符串(每个字符串是每个字符串的值细胞)。

我想要的整个结果是List&lt;List&lt;String&gt;&gt;(行列表)。每行是List&lt;String&gt;(单元格列表)。当前结果是行(行)列表,每一行/行是整个字符串。

【问题讨论】:

  • 您使用的是什么 CSV 解析器?网络搜索似乎只能找到CSVParser 类。没有CsvParser。由于您的问题是关于 CsvParser 生成的 Stream,当我们不知道它是什么时,您希望我们如何提供帮助?
  • 我正在使用 simpleflatmapper。
  • 我写过我正在使用 simpleflatmapper,但因此有 3 票反对。
  • 因为这里很少有人知道 simpleflatmapper,而且您没有链接到它或显示导入语句。 “simpleflatmapper”听起来像是与 Stream flatMap 方法相关的东西,这让我们陷入了一个循环。此外,您还没有向我们展示输入,所以我们怎么知道您希望看到什么。也许如果你提供了Minimal, Complete, and Verifiable example,你就不会被否决。

标签: java arrays csv java-stream


【解决方案1】:

由于文件是 CSV,你不需要使用任何外部库,所以你只需像这样读取 txt 文件一样读取文件

Scanner scanner=new Scanner(new File("MyFile.csv"));
while(scanner.hasNextLine()){
myArray=scanner.nextLine().split(",");
}

【讨论】:

  • 我们必须在这里使用一个库。
  • 不,除非有要求,否则不要使用任何外部库
  • 是的,这是要求。
  • 这只有在 CSV 没有带分隔符和换行符的引用字段时才有效。此外,它会比使用适当的库慢得多。
【解决方案2】:

我找到了解决办法:

return org.simpleflatmapper.csv.CsvParser
                    .separator('\t')    //<-- solution
                    .stream(in)
                    .map(Arrays::asList)
                    .collect(Collectors.toList());

谢谢大家!

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 2020-08-09
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2013-04-27
    • 2023-03-18
    • 2010-12-18
    相关资源
    最近更新 更多