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()
到底做什么呢?它只是返回一个空列表吗?如果是这样,一个lambdax->emptyList()
就足够了,而且更清晰。请详细说明此处的意图(英语,无代码)。@Matley如果您的地图可以返回一个空列表,则过滤并执行或操作。标题或标签中的流的相关性是什么?这里没有河流。