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

for a list how to create future task one at a time

我在java

中给出了列表
List<String> list;

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

的情况下异步执行此操作

我也希望能够中途停下来,这取决于上一个任务的结果。

您可以使用自定义的 for 循环进入您的列表,然后在 for 循环内,您可以做任何您想做的事情,例如继续、中断...

这是一个示例,说明如何循环访问 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);
}

希望这就是您要找的。 如果修改有效或无效,请更新我

// 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 检查将使所有剩余的阶段只传递该结果直到 stage 本身以该结果值完成。