列表如何一次创建一个未来的任务

时间:2017-09-22 05:12:33

标签: java completable-future futuretask

我在java中给出了列表

List<String> list;

我有一个函数,它接受String并给出CompletionStage。我想迭代遍历列表并按顺序处理每个任务,也就是说,当一个任务给出结果时,我只想从列表中安排下一个任务。有没有办法在不调用.get()

的情况下异步执行此操作

我还希望能够在此处中途停留,具体取决于之前任务的结果。

2 个答案:

答案 0 :(得分:1)

// Starting off like this means the loop doesn't need to special case the first iteration
CompletionStage<Result> stage = CompletableFuture.completedFuture(null);
for (String str : list) {
    stage = stage.thenCompose(result -> shouldStop(result) ? result : yourFunction(str));
}

这样做的最终结果是stage是一长串CompletionStage个对象的最终结尾。序列中的每个阶段仅在前一阶段完成时执行,因为这是thenCompose(以及所有CompletionStage链接方法)的工作方式。每个阶段都会调用你的函数并将结果传递给下一个阶段 - 直到你得到你想要停止的结果,此时shouldStop检查将使所有剩余的阶段直接通过结果直到{ {1}}本身已完成该结果值。

答案 1 :(得分:-1)

您可以使用自定义的for循环循环到列表中,然后在for循环中,您可以执行任何操作,例如continue,break,...

这是一个如何循环遍历java中的列表的示例:

List<String> list;//here assumed that you already initialized your list

for(String l: list) {//here each element of list is called l
//Do what ever you want to do here
System.out.println("single element of list: "+ l);
}

希望这就是你要找的东西。 更新我是否适用于修改