首页 > 解决方案 > 使用 Java8 流过滤列表并获取第一个元素

问题描述

 collectorConfiguration = Optional.ofNullable(recapPlacement.getPnetCode())
                    .map(pnetCode -> Optional.ofNullable(collectorConfigurations.stream()
                    .filter(c -> pnetCode.equals(c.getPnetCode()))
                    .collect(Collectors.toList())
                    .stream().filter(Objects::nonNull).findFirst())
                    .orElse(unknownExternalCollector))
                    .orElse(unknownExternalCollector);

在上面的代码中

unknownExternalCollector1)如果 pnetCode 为空,我想返回或

2)我想collectorConfigurations使用 pnetCode 迭代并找到至少一条记录,如果列表中没有与 pnetCode 匹配的元素,那么我想要 return unknownExternalCollector。我收到编译错误说

orElse
(java.util.Optional<com.capitalone.omega.collectorservice.domain.CollectorConfiguration>)
in Optional cannot be applied om.capitalone.omega.collectorservice.domain.CollectorConfiguration

标签: javajava-8java-stream

解决方案


您可以将其简化如下(无需收集然后流和调用findFirst。您可以flatMap在此处使用)

collectorConfiguration = Optional.ofNullable(recapPlacement.getPnetCode())
            .flatMap(pnetCode -> collectorConfigurations.stream()
                    .filter(c -> pnetCode.equals(c.getPnetCode()))
                    .filter(Objects::nonNull)
                    .findFirst())
            .orElse(unknownExternalCollector);

推荐阅读