Java 可选 orElse
Java Optional orElse
如何在 map
步骤之一中得到空列表时调用 orElse
?
MyObj myObj = new MyObj();
myObj.setAaa("aaa");
myObj.setBbb("bbb");
List<MyObj> myObjects = Arrays.asList(myObj);
Optional<List<MyObj>> opt = Optional.ofNullable(myObjects);
List<MyObj> result = opt
// .filter(el -> !returnEmptyList().isEmpty(el))
.map(el -> returnEmptyList(el))
.map(...)
.map(...)
.orElse(myObjects);
当我在 map
步骤中结果为空列表时,如何确保达到 orElse
?
我的过滤步骤的方法有效,但我不想调用 returnEmptyList()
两次。
如果 map
操作可以 return 一个空列表,您可以在 orElse
之前放置一个 filter
作为:
.map() // this can return an empty list
.filter(l -> !l.isEmpty())
.orElse(<return some default value>);
// if the list is empty, it would evaluate to Optional.empty() and return via orElse
我觉得您在滥用 Optional
来实现流畅的编程风格。 ...请不要那样做。
改为执行以下操作真的有那么难吗?
List<MyObj> myObjects = ...
List<MyObj> whatEverNeedsToBeCalculated = /* using myObjects... maybe extract to it's own function */
if (whatEverNeedsToBeCalculated.isEmpty())
return myObjects;
else
return whatEverNeedsToBeCalculated;
分配一次,使用两次 ;-)
而且如果真的为了流畅起见,我宁愿在JVM上使用另一种编程语言;-)
如何在 map
步骤之一中得到空列表时调用 orElse
?
MyObj myObj = new MyObj();
myObj.setAaa("aaa");
myObj.setBbb("bbb");
List<MyObj> myObjects = Arrays.asList(myObj);
Optional<List<MyObj>> opt = Optional.ofNullable(myObjects);
List<MyObj> result = opt
// .filter(el -> !returnEmptyList().isEmpty(el))
.map(el -> returnEmptyList(el))
.map(...)
.map(...)
.orElse(myObjects);
当我在 map
步骤中结果为空列表时,如何确保达到 orElse
?
我的过滤步骤的方法有效,但我不想调用 returnEmptyList()
两次。
如果 map
操作可以 return 一个空列表,您可以在 orElse
之前放置一个 filter
作为:
.map() // this can return an empty list
.filter(l -> !l.isEmpty())
.orElse(<return some default value>);
// if the list is empty, it would evaluate to Optional.empty() and return via orElse
我觉得您在滥用 Optional
来实现流畅的编程风格。 ...请不要那样做。
改为执行以下操作真的有那么难吗?
List<MyObj> myObjects = ...
List<MyObj> whatEverNeedsToBeCalculated = /* using myObjects... maybe extract to it's own function */
if (whatEverNeedsToBeCalculated.isEmpty())
return myObjects;
else
return whatEverNeedsToBeCalculated;
分配一次,使用两次 ;-)
而且如果真的为了流畅起见,我宁愿在JVM上使用另一种编程语言;-)