Возврат из функции, если значение в функции равно нулю - PullRequest
0 голосов
/ 22 мая 2019

Я хочу выйти из текущего метода / функции, если значение Optional отсутствует.

Я попробовал наивный подход, чтобы поместить выражение return в .orElseGet (), но, похоже, это не сработало. Лучшая альтернатива на данный момент выглядит так:

private void foo(Set<ISomeObject> someIterable) {

    Optional<ISomeObject> myObjectOpt = someIterable
        .stream()
        .filter(...)
        .findFirst();

    if(!myObjectOpt.isPresent()){
        return;
    }

    ISomeObject myObject = myObjectOpt.get();
    // do something with myObject
}

Это не кажется лучше читаемым, чем старый добрый Nullcheck, есть альтернативы?

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Вы можете передать Consumer на ifPresent и вместо этого делать с потребителем все, что захотите:

private void foo(Set<ISomeObject> someIterable) {
    someIterable
        .stream()
        .filter(...)
        .findFirst()
        .ifPresent(x -> {
            // do something with x
        });
    // do nothing!
}
0 голосов
/ 22 мая 2019

Что ж, похоже, вы хотите установить значение ISomeObject myObject, если присутствует Optional, один из способов сделать это:

ISomeObject [] myObject = new ISomeObject[1]; // effectively final strikes again!

Optional<ISomeObject> myObjectOpt = someIterable
    .stream()
    .filter(...)
    .findFirst()
    .ifPresent(x -> myObject[0] = x);

Но еще проще было бы:

myObject = someIterable
        .stream()
        .filter(...)
        .findFirst()
        .orElse(null); // in your code myObject is null by default anyway

Но даже в этом нет особого смысла, вы устанавливаете это поле, а затем ничего не делаете с ним?Тогда зачем вообще это делать?

Кроме того, findFirst из Set, конечно, не имеет особого смысла.

...