我想使用 Stream 方法,但我觉得它有点次优。我想避免混淆
.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 类似于: // 如果此 Optional 中存在值,则返回此可选,否则返回 fallback Optional orOptional(Optional fallback)
编辑 2018-10-15:为了不被我在示例中使用地图的事实所困扰,让我们假设这些只是一些带有 getter 值的 bean。bean 可以为 null,或者 getter 返回的值可以为 null。
九州编程
明月笑刀无情
相关分类