我有以下现有的实现
CompletableFuture<Employee>[] employeeDetails =
empIds.stream().map(empId ->
employeeService.employeeDetails(Integer.valueOf(empId)))
.filter(Objects::nonNull)
.toArray(CompletableFuture[]::new);
在此代码中,我需要在 HashMap 中检查 empId 是否已存在,如下所示 - 如果 empId 不存在于 HashMap 中,则调用服务并将其放入 HashMap 以供将来使用。
Map<String, CompletableFuture<Employee>[]> employeeCache = new HashMap<>();
..........
CompletableFuture<Employee>[] employeeDetails =
empIds.stream().map(empId ->
//Here I need to check in HashMap that empId is present or not if present then fetch from Map instead of calling service.
employeeService.employeeDetails(Integer.valueOf(empId)))
.filter(Objects::nonNull)
.toArray(CompletableFuture[]::new);
我如何添加 if
检查 stream()
api 如上所示,如果存在则从 Map 获取。
最佳答案
您可以使用 Map#computeIfAbsent
实现你正在尝试做的事情:
Map<String, CompletableFuture<Employee>[]> employeeCache = new HashMap<>();
CompletableFuture<Employee>[] employeeDetails = empIds.stream()
.map(empId -> employeeCache
.computeIfAbsent(empId, k -> employeeService.employeeDetails(Integer.valueOf(empId))))
.filter(Objects::nonNull)
.toArray(CompletableFuture[]::new);
关于java - java 8 流 api 中的条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54013860/