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上使用另一种编程语言;-)