Я хотел бы использовать потоковый подход, но я чувствую, что он несколько неоптимален.Я хотел бы избежать путаницы
.map(Optional::of)
Можно ли сделать метод № 2 ниже, чтобы избежать этой дополнительной путаницы, есть ли дополнительный метод, который я мог бы использовать для достижения того, что я хочу?
// Either map can be null, empty, or have the value for key
Map<String,String> map1 =
Map<String,String> map2 =
// Method #1
String value1 = null;
if (map1 != null) {
value1 = map1.get(key);
}
if (value1 == null) {
if (map2 != null) {
value1 = map2.get(key);
}
}
if (value1 == null) value1 = "default";
// Method #2
String value2 = Optional.ofNullable(map1)
.map(map -> map.get(key))
.map(Optional::of)
.orElse(Optional.ofNullable(map2).map(map -> map.get(key)))
.orElse("default");
assertEquals(value1, value2);
Я хотел бы иметь что-то вроде этого:
Optional.ofNullable(map1)
.map(map -> map.get(key))
.orOptional(Optional.ofNullable(map2).map(map -> map.get(key)))
.orElse("default");
Где orOptional будет выглядеть примерно так: // Если значение присутствует в этом Необязательном, возвращает этот необязательный, в противном случае возвращает возвратный параметр Необязательный orOptional (Необязательный запасной вариант)
Редактировать 2018-10-15: Чтобы не застрять на том факте, что я использовал карты в примере, давайте предположим, что это всего лишь некоторые bean-компоненты с getter для значения.Либо бин может быть нулевым, либо значения, возвращаемые получателями, могут быть нулевыми.