Transmitir en OrElse de opcionales

Arjun:

Estoy tratando de utilizar una Streamen orElsey tener dificultad para comprender el error.

collectorConfiguration = Optional.ofNullable(recapPlacement.getAttId())
    .map(attId -> Optional.ofNullable(processorEngine.buildFrimFromAttId(attId))
         .orElseThrow( () -> new OmegaException("UnableToFirmByAttId", recapPlacement.getAttId())))
    .orElse( () -> Optional.ofNullable(collectorConfigurations.stream() //getting error here
        .filter(cc -> recapPlacement.getPnetCode().equals(cc.getPnetCode()))
        .filter(Objects::nonNull)
        .findFirst())
        .orElseThrow( () -> new OmegaException("CollectorCouldNotMapForPnetCode", recapPlacement.getPnetCode()))
    );

En general en el código anterior que estoy tratando de

  1. obtener collectorConfigsi attIdno es nulo

  2. si attIdno es nulo y collectorConfigno encontrado para que la attIdexcepción a continuación, estoy tirando

  3. si attIdes nulo entonces yo estoy usando pnetcódigo para obtener collectConfigdescargándolo collectConfigurationslista

  4. si collectConfigno se encuentra a pnetCodecontinuación, estoy tirando excepción

Se trata de dar un error de compilación ' Target type of a lambda expression must be an interface' en el orElsebloque.

también:

Es posible que desee reemplazar

.orElse( () -> Optional.ofNullable(collectorConfigurations.stream() //getting error here

con Optional.orElseGetel que espera una Suppliercomo:

.orElseGet( () -> Optional.ofNullable(collectorConfigurations.stream() ...

Además de lo anterior, no debería ser necesario el Optional.ofNullableen el proveedor

.orElseGet( () -> collectorConfigurations.stream()
    .filter(cc -> recapPlacement.getPnetCode().equals(cc.getPnetCode()))
    .filter(Objects::nonNull) //non-null filtered
    .findFirst()) // optional
    .orElseThrow( () -> new OmegaException("CollectorCouldNotMapForPnet...

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=206166&siteId=1
Recomendado
Clasificación