Выберите значение альтернативного поля элемента списка, если значение целевого поля равно нулю - PullRequest
0 голосов
/ 06 июня 2018

Код для выбора значения целевого поля ('targetField'):

result = someList.stream()
   .filter(i -> i.geFilterField() == someValue)
   .map(i -> i.getTargetField())
   .findFirst()
   .orElse(null);

Но 'targetFiled' обнуляется.
Как я могу получить значение из альтернативного поля (некоторый 'alterField'), если targetзначение поля равно нулю?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Использование Optional#ofNullable может быть вариантом здесь

result = someList.stream()
                 .filter(i -> i.geFilterField() == someValue)
                 .map(i -> Optional.ofNullable(i.getTargetField())
                                   .orElse(i.getAlterField()))
                 .findFirst()
                 .orElse(null);
0 голосов
/ 06 июня 2018

если вам нужно извлечь альтернативное значение из объекта, то это можно сделать следующим образом:

someList.stream()
   .filter(i -> i.geFilterField() == someValue)
   .map(i -> i.getTargetField() != null ? i.getTargetField() : i.getAlterField())
   .findFirst()
   .orElse(null);
0 голосов
/ 06 июня 2018

Поскольку вы ищете только первый элемент, отфильтруйте «необработанные» элементы, а затем выберите поле, если у вас есть только один объект, например:

tmp = someList.stream()
   .filter(i -> i.geFilterField() == someValue && (i.getTargetField() != null || i.getAlterField() != null))
   .findFirst()
   .orElse(null);
// At this point tmp is either null if nothing is found, or
// it is an object with one or both target fields set to non-null values
result = null;
if (tmp != null) {
    result = tmp.getTargetField() != null ? tmp.getTargetField() : tmp.getAlterField();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...