我正在尝试了解CompletableFuture
以及如何利用它来构建一个包含从多个端点获得的信息的对象。我遇到过几个例子,但没有一个是完全适合我的问题的。例如,这个并行运行相同的方法来获取字符串列表,我想在其中并行运行多个方法来构建和返回一个对象。
我为员工创建了一个简单的 DTO:
@Builder
@Data
@AllArgsConstructor
public class EmployeeDTO {
private String name;
private String accountNumber;
private int salary;
}
我创建了一个服务来模拟调用三个独立的 API 来设置 DTO 的值,等待时间相当长:
public class EmployeeService {
public EmployeeDTO setName() {
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return EmployeeDTO.builder().name("John Doe").build();
}
public EmployeeDTO setAccountNumber() {
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return EmployeeDTO.builder().accountNumber("1235").build();
}
public EmployeeDTO setSalary() {
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return EmployeeDTO.builder().salary(100000).build();
}
}
我可以使用supplyAsync所有三种方法然后运行,allOf但它什么也没做:
private void run() {
EmployeeService employeeService = new EmployeeService();
CompletableFuture<EmployeeDTO> employeeCfWithName = CompletableFuture
.supplyAsync(employeeService::setName);
CompletableFuture<EmployeeDTO> employeeCfWithAccountNumber = CompletableFuture
.supplyAsync(employeeService::setAccountNumber);
CompletableFuture<EmployeeDTO> employeeCfWithSalary = CompletableFuture
.supplyAsync(employeeService::setSalary);
CompletableFuture allCompletableFutures = CompletableFuture.allOf(employeeCfWithName, employeeCfWithAccountNumber, employeeCfWithSalary);
}
如何将结果组合成一个 EmployeeDTO?
www说
茅侃侃
相关分类