¿Cómo reemplazar mi antiguo código Java con Opcionales (programación funcional)?

¿Cómo reemplazar el siguiente código usando Java 8 Opcionales (programación funcional)?

ClassA classA = dbService.findByA(a);

if (classA == null) {
    classA = dbService.findByB(b);
}

if (classA == null) {
    throw new Exception();
}

return classA;

editar: ¿Tal vez si voy a hacer findByAy findByBregresar Opcional hará que mi código sea más limpio usando la programación funcional?

Respuesta 1
return Optional.ofNullable(Optional.ofNullable(dbService.findByA(a))
    .orElseGet(() -> dbService.findByB(b)))
    .orElseThrow(() -> new Exception());

O, Java 9, un poco mejor:

Optional.ofNullable(dbService.findByA(a))
    .or(() -> Optional.ofNullable(dbService.findByB(b)))
    .orElseThrow(() -> new Exception());
Respuesta: 2

Esto funcionaria

Optional.ofNullable(
    Optional.ofNullable(dbService.findByA(a))
            .orElseGet(() -> dbService.findByB(b))
).orElseThrow(Exception::new);

No creo que esto sea mucho mejor.

Respuesta: 3

Quiero crear un objeto que tenga dos tipos genéricos, pero en algunos lugares se crea con un solo tipo genérico dado. En esos casos, el segundo tipo no tiene importancia, por lo que quiero poder ...

He creado 2 complementos, implementando un complemento de controlador ODA y su complemento de interfaz de usuario para la extensión BIRT a Eclipse. Mis complementos funcionan como se esperaba cuando eclipse inicia otra aplicación de eclipse ...

Cada vez que intento ejecutar una aplicación pequeña que utiliza un DB Derby, aparece este mensaje de error: Mensaje: La base de datos en / path / to / db / TheDB tiene un formato incompatible con la versión actual del software ...

¿Por qué cuando se usa un método de instancia en la referencia de método (: :) no se produce una NullPointerException si establecemos la instancia de Object en null? public class MethodReferenceTest {public static ...