如何在java 8中筛选Optional.empty
我想用0筛选值以打印无效消息,但结果是可选的.empty如何在java 8中筛选Optional.empty,java,java-8,optional,Java,Java 8,Optional,我想用0筛选值以打印无效消息,但结果是可选的.empty Long l = 0L; Optional<String> l2 = Optional.of(l).filter(t -> t>0).map(t ->t.toString()); Optional<String>l3 =l2.filter(String::isEmpty).map(t ->"invalid"); System.out.println(l3); 长l=0L; Opti
Long l = 0L;
Optional<String> l2 = Optional.of(l).filter(t -> t>0).map(t ->t.toString());
Optional<String>l3 =l2.filter(String::isEmpty).map(t ->"invalid");
System.out.println(l3);
长l=0L;
Optional l2=Optional.of(l).filter(t->t>0).map(t->t.toString());
optional3=l2.filter(字符串::isEmpty).map(t->“无效”);
系统输出打印LN(l3);
需要返回类型为可选
预期输出-无效
实际输出-
可选。为空
已更新
需要返回类型为String
预期输出-无效值0
实际输出-可选。为空
不使用过滤器如何
String l3 = l2
.map(Object::toString)
.orElse("invalid");
不使用过滤器怎么样
String l3 = l2
.map(Object::toString)
.orElse("invalid");
如果您使用的是Java 9+,则可以使用或
,如果当前的为空,则使用可选的选项
:
Optional<String> l3 = l2.filter(String::isEmpty)
.or(() -> Optional.of("invalid"));
可选l3=l2.filter(字符串::isEmpty)
.或(()->可选的(“无效”));
如果您使用的是Java 9+,则可以使用或
,如果当前的为空,则可使用可选的选项
:
Optional<String> l3 = l2.filter(String::isEmpty)
.or(() -> Optional.of("invalid"));
可选l3=l2.filter(字符串::isEmpty)
.或(()->可选的(“无效”));
无需使用可选或过滤器,只需:
String l3 = l > 0 ? l.toString() : "Invalid";
如果要处理空值,则:
String l3 = (l != null && l > 0) ? l.toString() : "Invalid";
如果要在无效情况下显示数字,则:
String l3 = (l != null && l > 0) ? l.toString() : String.format("Invalid %d", l);
无需使用可选或过滤器,只需:
String l3 = l > 0 ? l.toString() : "Invalid";
如果要处理空值,则:
String l3 = (l != null && l > 0) ? l.toString() : "Invalid";
如果要在无效情况下显示数字,则:
String l3 = (l != null && l > 0) ? l.toString() : String.format("Invalid %d", l);
似乎没有空的元素(“”)。抱歉,但您所做的看起来像是滥用了可选项。如果您知道某个值存在(不管它是否正确,只要它不是null
),那么可选的不是正确的工具。这种情况应该更适合由simpleif(validate(value)){..handle correct value..}或者{..handle correct value..}
处理。现在你的问题看起来像是如果你的输入不是空的,那么预期的结果是什么?@YCF_L原始值似乎没有空的元素(“”)。对不起,但是你所做的看起来像是滥用了可选值。如果您知道某个值存在(不管它是否正确,只要它不是null
),那么可选的不是正确的工具。这种情况应该更适合由simpleif(validate(value)){..handle correct value..}或者{..handle correct value..}
处理。现在你的问题看起来像是如果你的输入不是空的,那么预期结果是什么?@YCF_L原始值谢谢。如果我不需要打印无效值+l2
,或者不需要打印可选值,那么orElse将无法工作。您知道如何实现吗。如果我不需要可选打印无效值+l2
,或LSE将不起作用。你知道如何实现吗?我不需要u,你的意思是在过滤器内使用它,字符串l3=l>0?l、 toString():“无效”
@coder25不,你不需要像使用可选的no过滤器一样使用它。@coder25但是为什么它会出现在第一位呢?如果你的目标(基于你的问题现在看起来如何,不确定它是否是你的真实目标)可以以上述答案中所示的更简单的方式实现,为什么要涉及可选问题?@coder25请向我们展示原始问题,不要发布XYproblem@coder25对不起,我没听懂。这就像说“它就在那里,因为它就在那里”,这并没有给我们太多。通常情况下,事情会在某个地方发生,因为有人决定它应该在那里,我想问一下这个决定背后的原因(为什么有人——代码作者,可能是你——尽管在那个地方必须使用可选的?)。没有得到u,你的意思是在过滤器中使用它,String l3=l>0?l、 toString():“无效”
@coder25不,你不需要像使用可选的no过滤器一样使用它。@coder25但是为什么它会出现在第一位呢?如果你的目标(基于你的问题现在看起来如何,不确定它是否是你的真实目标)可以以上述答案中所示的更简单的方式实现,为什么要涉及可选问题?@coder25请向我们展示原始问题,不要发布XYproblem@coder25对不起,我没听懂。这就像说“它就在那里,因为它就在那里”,这并没有给我们太多。通常情况下,事情会在某个地方发生,因为有人决定它应该在那里,我在问这个决定背后的原因(为什么有人——代码的作者,可能是你——尽管在那个地方必须使用可选选项?)。