使用Java8流将数据写入.CSV文件

使用Java8流将数据写入.CSV文件,java,collections,java-stream,filewriter,Java,Collections,Java Stream,Filewriter,我试图用Java将两组数据输出到一个.csv文件中 集合1=客户名称 集合2=客户参考 我希望.csv显示为: Smith:839393, Johnson:283940, Collins:293845 我的代码: private void writeDataToFile() throws IOException { FileWriter writer = new FileWriter("src/test/resources/custData.csv");

我试图用Java将两组数据输出到一个.csv文件中

集合1=客户名称 集合2=客户参考

我希望.csv显示为:

Smith:839393,
Johnson:283940,
Collins:293845
我的代码:

private void writeDataToFile() throws IOException {

    FileWriter writer = new FileWriter("src/test/resources/custData.csv");

    List<String> customers = new ArrayList<>(customers);
    List<String> references = new ArrayList<>(references);

    String collect1 = customers.stream().collect(Collectors.joining(",\n" + ":"));
    String collect2 = references.stream().collect(Collectors.joining(",\n" + ":"));

    writer.write(collect1 + collect2);
    writer.close();

}

如何实现所需的输出?

如果两个列表的大小相同,则可以这样做。使用IntStream.range迭代列表,然后映射数据。然后收集加入\n

我假设客户和推荐人的规模相同。您可以在0和customers.size之间迭代,并组合这两个列表的元素:

customers.get(i) + ":" + references.get(i) + ",\n"
试试这个:

String output = IntStream.range(0, customers.size()).boxed()
        .map(i -> customers.get(i) + ":" + references.get(i) + ",\n").collect(Collectors.joining());

假设两个集合具有相同数量的元素,您可以尝试以下方法

String output =
        IntStream.rangeClosed(0, customers.size()-1)
            .boxed()
            .map(i -> customers.get(i) + ":" + references.get(i))
            .collect(Collectors.joining("\n"));
writer.write(output);

你要做的就是收集拉链

在纯java中,您可以完成解决方案

IntStream.range(0, Math.min(customers.size(), references.size()))
         .mapToObj(i -> customers.get(i) + ":" + references.get(i))
         .collect(Collectors.joining(",\n"));
如果你有番石榴,你可以做得更好

Streams
    .zip(customers.stream(), references.stream(), (customer, reference) -> customer + ":" + reference)
    .collect(Collectors.joining(",\n"));

您可能缺少包含引用的客户的抽象。顺便说一下,这些冒号字符违反了格式。
IntStream.range(0, Math.min(customers.size(), references.size()))
         .mapToObj(i -> customers.get(i) + ":" + references.get(i))
         .collect(Collectors.joining(",\n"));
Streams
    .zip(customers.stream(), references.stream(), (customer, reference) -> customer + ":" + reference)
    .collect(Collectors.joining(",\n"));