Java 8 Необязательно: выберите одно из двух возможных значений NULL - PullRequest
0 голосов
/ 11 октября 2018

Мне нужно выбрать между двумя строковыми переменными - первая, которая имеет значение не null.Если они оба null - тогда я хочу выйти из метода.Это может быть сделано в следующем фрагменте кода:

String value1 = <get from somewhere>
String value2 = <get from somewhere else>
String target = null;
if (value1 != null) target = value1;
else if (value2 != null) target = value2;
if (target == null) return null;

Это также может быть сделано в краткой форме:

String target = value1 != null ? value1 : value2 != null ? value2 : null;
if (target == null) return null;

Я борюсь с тем, как сделать это в свободной форме сOptional
Примечание: я могу использовать только синтаксис Java 8 (поэтому нет Optional.or())

Ответы [ 2 ]

0 голосов
/ 11 октября 2018
String target = Optional.ofNullable(value1).orElse(value2)

Если value1 == null, вернуть value2 - которое либо имеет значение, либо равно нулю.Нет необходимости явно обрабатывать случай value2 == null, сопоставляя его с нулем.

0 голосов
/ 11 октября 2018

Если у вас есть только две опции, вы можете сделать это с помощью:

target = Optional.ofNullable(value1)
            .orElseGet(() -> Optional.ofNullable(value2).orElse(null));

Даже если это можно сделать для работы более чем с двумя переменными.

С java-9,это можно сделать немного более читабельным:

target = Optional.ofNullable(value1)
            .or(() -> Optional.ofNullable(value2))
            .orElse(null);

Другой ответ, на самом деле, очень хорош;таким образом, это может быть дополнительно упрощено, чтобы вообще не использовать Optional s, по-прежнему, одну строку:

 target = value1 != null ? value1 : value2;
...