使用Java8流将数据写入.CSV文件
我试图用Java将两组数据输出到一个.csv文件中 集合1=客户名称 集合2=客户参考 我希望.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");
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"));