等待监听器完成内部循环[复制]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了等待监听器完成内部循环[复制]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我正在开发一个java方法,它接收一个项目列表,生成每个项目的报告(PDF文件),最后将所有这些PDF文件压缩成一个zip文件。
这是我的简化方法:
List<File> pdfs = new ArrayList<File>();
public void generateZipOfItems(List<Item> items) {
for(Item item : items) {
ReportThread report = generatePDFReport(item);
report.addListener(new ReportExecuteListener() {
@Override
public void finishReport(ReportExecutionEvent reportExecutionEvent) {
// when report is finished, add the PDF file on arrayList
pdfs.add(reportExecutionEvent.getReport());
}
}
createZipFromFileList(pdfs); // this method just zip the files, and it is working very well
}
在完美的场景中,该方法应该生成项目A的报告,将其添加到“pdfs”数组并重复项目B,C等。最后,对于阵列上的所有pdfs,它应该压缩文件。
问题是,循环不等待监听器完成生成报告文件,并且正在创建没有项目的zip文件。
循环应该在迭代之前等待监听器。我怎样才能做到这一点?
答案
我会使用并行流。就像是:
createZipFileFromFileList(items.parallelStream()
.map(item -> generatePDFReport(item))
.collect(Collectors.toList()));
编辑:在这个重构中,generatePDFReport()
将返回生成的PDF对象本身,而不是ReportThread
。
以上是关于等待监听器完成内部循环[复制]的主要内容,如果未能解决你的问题,请参考以下文章