gpt4 book ai didi

java - 停止供应商内部的 CompletableFuture 链

转载 作者:行者123 更新时间:2023-12-01 23:43:49 25 4
gpt4 key购买 nike

我有这样的操作,

public void createFuture() {
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 5);
future.thenApply(i -> {
if (i == 5) {
System.out.println("hello, i equals to 5 so expensive operations are unnecessary");
}
return i;
}).thenApply(i -> {
if (i != 5) {
System.out.println("Expensive operation");
}
return i;
}).thenApply(i -> {
if (i != 5) {
System.out.println("Expensive operation");
}
return i;
}).thenApply(i -> {
if (i != 5) {
System.out.println("Expensive operation");
}
return i;
}).thenApply(i -> {
if (i != 5) {
System.out.println("Expensive operation");
}
return i;
});

}

在第一个 block 中,我检查一些条件(i == 5),如果为真,则不需要其余操作。我不想抛出异常来取消其余的,因为这不是特殊情况。除了向每个操作传递一些 boolean 值之外,还有其他好方法吗?

最佳答案

CompletableFuture.thenCompose() 应该可以解决问题。

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;

class Scratch {

public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 5);
CompletableFuture<Integer> composed = future.thenCompose(number -> {
if (number == 5)
return simpleFuture(number);
else
return complexFuture(number);
});
System.out.println(composed.get());
}

private static CompletionStage<Integer> complexFuture(Integer number) {
return CompletableFuture.completedFuture(number)
.thenApply(i -> {
System.out.println("I am expensive");
return i;
});
}

private static CompletableFuture<Integer> simpleFuture(Integer number) {
return CompletableFuture.completedFuture(number)
.thenApply(i -> {
System.out.println("I am cheap");
return i;
});
}
}

关于java - 停止供应商内部的 CompletableFuture 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59559478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com