需要关于Java1.8的帮助(可选,带映射)

需要关于Java1.8的帮助(可选,带映射),java,lambda,java-8,optional,Java,Lambda,Java 8,Optional,我想检查字符串对象,如果存在,则返回一个对象,否则返回另一个对象 当条件执行时,它不会返回,也会继续执行 return Optional.of(where.getObject()).filter(f -> f.isPresent()).map(str -> { System.out.println("Value here is str" + str.get()); return getPredicateByOption(joinMap.get(str.get()),

我想检查字符串对象,如果存在,则返回一个对象,否则返回另一个对象

当条件执行时,它不会返回,也会继续执行

return Optional.of(where.getObject()).filter(f -> f.isPresent()).map(str -> {
    System.out.println("Value here is str" + str.get());
    return getPredicateByOption(joinMap.get(str.get()), where, builder, null);
}).orElse(getPredicateByOption(null, where, builder, root));
我正在尝试替换以下
if
条件:

if (!Optional.empty().equals(where.getObject())) 
     return getPredicateByOption(null, where, builder, root); 
return getPredicateByOption(joinMap.get(where.getObject().get()), where, builder, null);

where.getObject()
的返回类型是
可选的

可以通过以下方式替换
if
条件:

return getPredicateByOption(where.getObject().map(joinMap::get).orElse(null), 
                            where, builder, 
                            where.getObject().isPresent() ? null : root);

我假设
where.getObject()
返回一个
Optional
,它保存
joinMap
映射中的键。请注意,即使
where.getObject
返回非空可选值,但是
joinMap
中没有相应的字符串,您仍然会得到正确的结果(传递给
getPredicateByOption
的第一个参数将为空。

什么是
where.getObject
getPredicateByOption
do?getObject返回字符串。getPredicateOption返回谓词。我知道当你不给我们一个参数时会很困难。
sysout
打印出来了吗?基于你问题的第一句话在上,您应该使用一个简单的
if..else
语句或三元运算符。仅仅因为Java 8的新函数操作很时髦而使用它们并不是好的做法。在这种情况下,使用自C以来一直存在的枯燥的旧语法无疑会产生更具可读性的代码,从而有更好的工作机会。
Ooptional.empty().equals(…)
是一种非常扭曲的说法,
…isEmpty()