java - java 8 流 api 中的条件检查

标签 java java-8 java-stream

我有以下现有的实现

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/

相关文章:

java - 更改布局的组件

java - 我们可以更改 java 使用的 unicode 版本吗?

java - 将数组转换为 Java 8 中具有特定范围的列表

java - 如何使用java流创建一个固定长度和特定数字的int[]?

java - 顺序拆分器上的 estimateSize()

java - 如何使用流重用具有几乎相同实现的 Java 方法

java - 试图确定正确的正则表达式

java - 没有定义 [org.springframework.transaction.PlatformTransactionManager] 类型的合格 bean

java - 功能接口(interface)作为功能引用

Java 8 流映射减少