Encadenando varios CompletionStage solo si se logra una condición

Yo tengo variasCompletionStage métodos que me gustaría encadenar. El problema es que el resultado del primero determinará si se deben ejecutar los siguientes. En este momento, la única forma de lograr esto parece ser pasar argumentos "especiales" al siguienteCompletionStage entonces no ejecuta el código completo. Por ejemplo:

public enum SomeResult {
    RESULT_1,
    RESULT_2,
    RESULT_3
}

public CompletionStage<SomeResult> someMethod(SomeArgument someArgument) {

    return CompletableFuture.supplyAsync(() -> {
        // loooooong operation
        if (someCondition)
            return validValue;
        else
            return null;
    }).thenCompose(result -> {
        if (result != null)
            return someMethodThatReturnsACompletionStage(result);
        else
            return CompletableFuture.completedFuture(null);
    }).thenApply(result -> {
        if (result == null)
            return ChainingResult.RESULT_1;
        else if (result.someCondition())
            return ChainingResult.RESULT_2;
        else
            return ChainingResult.RESULT_3;
    });
}

Dado que todo el código depende de la primerasomeCondition (si esfalse entonces el resultado seráRESULT_1, si no, entonces debería ejecutarse todo el código) esta construcción me parece un poco fea. ¿Hay alguna manera de decidir si 2nd (thenCompose(...)) y tercero (thenApply(...)) los métodos deben ejecutarse?

Respuestas a la pregunta(2)

Su respuesta a la pregunta