CompletableFuture.thenApply
时间: 2023-11-07 07:03:51 浏览: 105
CompletableFuture.thenApply是Java的一个方法,用于在CompletableFuture完成后应用一个函数。它接受一个Function作为参数,该函数将在CompletableFuture完成时被应用,并返回一个新的CompletableFuture,其结果是应用该函数后的结果。
下面是使用thenApply的示例代码:
```java
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 10);
CompletableFuture<String> result = future.thenApply(num -> "Result: " + num * 2);
System.out.println(result.get()); // 输出: Result: 20
```
在上面的示例中,我们首先创建了一个CompletableFuture对象,该对象会在后台线程中执行一个任务并返回结果。然后我们调用了thenApply方法,传入一个lambda表达式作为参数,该lambda表达式将结果乘以2并添加前缀字符串。最后,我们通过调用get方法来获取最终的结果。
相关问题
CompletableFuture#thenApply
`CompletableFuture.thenApply`是一个用于处理异步计算结果的方法,它属于Java 8中的`java.util.concurrent.CompletableFuture`类。当你有一个`CompletableFuture`对象并想要对它的完成结果应用某个函数时,可以使用这个方法。简单来说,`thenApply`允许你在当前`CompletableFuture`完成后,将其结果传递给指定的函数,并返回一个新的`CompletableFuture`,新的`CompletableFuture`的结果将是该函数应用后的值。
例如:
```java
CompletableFuture.supplyAsync(() -> someExpensiveTask())
.thenApply(result -> processResult(result))
.thenAccept(System.out::println); // 输出经过processResult()处理后的结果
```
在这个例子中,`someExpensiveTask()`是异步执行的任务,`processResult()`是对任务结果进行操作的函数。`thenApply`会在`someExpensiveTask`完成之后立即应用`processResult`,并将结果传递给下一个链式操作。
CompletableFuture.thenrun
CompletableFuture的thenRun()方法是一个回调函数,它接收一个Runnable对象作为参数,并在CompletableFuture完成执行后执行该Runnable对象。该方法不会接收前一个CompletableFuture的执行结果作为参数,因为它只是用来执行一些副作用操作或清理操作,而不是处理计算结果。
例如,下面的代码演示了如何使用thenRun()方法来注册一个回调函数,在异步任务执行完成后执行该回调函数:
```
CompletableFuture.runAsync(() -> {
// 执行异步任务
System.out.println("Async task executed.");
}).thenRun(() -> {
// 异步任务执行完成后,执行回调函数
System.out.println("Async task completed.");
});
```
在上面的代码中,我们使用CompletableFuture.runAsync方法来执行一个异步任务,该任务只是在控制台上输出一条信息。然后,我们使用thenRun()方法来注册一个回调函数,在异步任务执行完成后执行该回调函数。在这个例子中,我们只是在控制台上输出一条信息"Async task completed.",表示异步任务已经完成。
需要注意的是,thenRun()方法是一个无参数的函数,它不会接收异步任务的执行结果作为参数,因此它只适用于那些不需要处理计算结果的情况。如果我们需要处理异步任务的计算结果,就需要使用其它的方法,如thenApply()、thenAccept()等。
阅读全文