У меня есть несколько методов CompletionStage, которые я хотел бы связать. Проблема в том, что результат первого будет определять, должны ли выполняться следующие. Прямо сейчас единственный способ добиться этого - это передать "специальные" аргументы в следующий CompletionStage, чтобы он не выполнял полный код. Например:
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;
    });
}
Так как весь код зависит от первого someCondition (если он false, тогда результат будет RESULT_1, если не тогда весь код должен быть выполнен), эта конструкция выглядит немного уродливой для меня. Есть ли способ решить, должны ли выполняться методы 2-го (thenCompose(...)) и 3-го (thenApply(...))?
