Java可选orElse

Java可选orElse,java,java-8,optional,Java,Java 8,Optional,当在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 =

当在
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);
MyObj MyObj=新的MyObj();
myObj.setAaa(“aaa”);
myObj.setbb(“bbb”);
List myObjects=Arrays.asList(myObj);
Optional opt=可选的空值(myObjects);
列表结果=opt
//.filter(el->!returnEmptyList().isEmpty(el))
.map(el->returnEmptyList(el))
.map(…)
.map(…)
.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);

“使用我的筛选器”步骤的方法有效,但我不想调用两次
returnEmptyList()

如果
map
操作可以返回空列表,则可以将
筛选器
放在
之前,如下所示:

.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 
.map()//这可能返回一个空列表
.filter(l->!l.isEmpty())
.orElse();
//如果列表为空,它将计算为Optional.empty()并通过orElse返回

我感觉您误用了
可选功能
,以获得流畅的编程风格。。。请不要那样做

做以下事情真的那么难吗

List<MyObj> myObjects = ...
List<MyObj> whatEverNeedsToBeCalculated = /* using myObjects... maybe extract to it's own function */

if (whatEverNeedsToBeCalculated.isEmpty())
  return myObjects;
else
  return whatEverNeedsToBeCalculated;
列出myObjects=。。。
列出使用MyObject计算的Verneedstobecalculated=/*值。。。也许提取到它自己的功能*/
if(需要计算的内容。isEmpty())
返回对象;
其他的
返回需要计算的内容;
分配一次,使用两次;-)


如果真的是为了流畅,我宁愿在JVM上使用另一种编程语言;-)

是的,但在这种方法中,我必须调用我的方法两次:.filter(el->!returnEmptyList().isEmpty()).map(el->returnEmptyList())。returnEmptyList()是一个从database@Matley当然,您必须调用它两次,因为映射可以转换对象并返回空列表,不管它的初始状态是什么。@Matley“returnEmptyList()是一个返回值的DAO方法”对我来说没有任何意义…@Naman YES!我当然是斯图皮!l、 isEmpty()解决了我的问题您要将它(
列表
)ping到什么位置?和
orElse
当前返回最初创建的相同
列表
?代码中的
returnEmptyList
是什么?这无关紧要-当我的“映射”步骤中返回一个空列表时,我想调用orElse语句。您试图实现什么逻辑?如果有
.map()
返回一个空列表,是否要返回默认列表?如果所有映射操作都返回一个空列表(如果给它们一个),那么您是否可以让它们全部出现,然后作为最后一步进行过滤?那么
returnEmptyList()
到底做什么呢?它只是返回一个空列表吗?如果是这样,一个lambda
x->emptyList()
就足够了,而且更清晰。请详细说明此处的意图(英语,无代码)。@Matley如果您的
地图
可以返回一个空列表,则
过滤
并执行
操作。标题或标签中的流的相关性是什么?这里没有河流。