Использование потоков Java8 для фильтрации списка и получения первого элемента - PullRequest
0 голосов
/ 09 ноября 2018
 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);

Здесь, в приведенном выше коде

1) Я хочу вернуть unknownExternalCollector, если pnetCode имеет значение null OR

2) Я хочу повторить collectorConfigurations и найти хотя бы один запись с помощью pnetCode, если в списке нет элементов, которые соответствует pnetCode, тогда я хочу вернуть unknownExternalCollector. Я получаю сообщение об ошибке компиляции

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

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете упростить это следующим образом (нет необходимости собирать, а затем передавать и вызывать findFirst. Вы можете использовать flatMap здесь)

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