Java 8: Использование Необязательный с лямбда - PullRequest
0 голосов
/ 03 июля 2018

Как я могу кодировать логику ниже, используя Optional и Lambda? У меня есть два списка

Список успешно = новый ArrayList <> ();
Список сбоев = новый ArrayList <> ();

А есть объект

Значение RoomTypes

, для которого value.getErrorType() может быть NULL или нет, а value.getId() возвращает целое число.

Я хотел бы обновить success и failure со списком value.getId(), если value.getErrorType() равно нулю.

Что-то вроде:

if(value.getErrorType().equals(NULL)){
   success.add(value.getId())
}
else{
   failure.add(value.getId())
}

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Предполагая, NULL на самом деле означает null, вы можете использовать

Optional.ofNullable(value.getErrorType())
        .map(x -> failure).orElse(success).add(value.getId());

хотя не рекомендуется использовать Optional для такого случая, так как аналогичная обычная проверка проста:

(value.getErrorType() == null? success: failure).add(value.getId());
0 голосов
/ 03 июля 2018

Это то, что вы просите,

Optional.ofNullable(value.getErrorType())
        .ifPresentOrElse(ignored -> failures.add(value.getId()),
        () -> success.add(value.getId()));

Однако это не очень хорошее использование потоков Java 8, хотя оно имеет некоторый побочный эффект. Также обратите внимание, что это решение Java 9. Вариант Java 8 кажется более многословным, как так,

Optional.ofNullable(value.getErrorType()).map(ignored -> {
    failures.add(value.getId());
    return failures;
}).orElseGet(() -> {
    success.add(value.getId());
    return success;
});
...