有关如何一次创建未来任务的列表
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
本身以该结果值完成。
我在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
本身以该结果值完成。