如何在java 8中筛选Optional.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

我想用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;
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
),那么可选的不是正确的工具。这种情况应该更适合由simple
if(validate(value)){..handle correct value..}或者{..handle correct value..}
处理。现在你的问题看起来像是如果你的输入不是空的,那么预期的结果是什么?@YCF_L原始值似乎没有空的元素(“”)。对不起,但是你所做的看起来像是滥用了可选值。如果您知道某个值存在(不管它是否正确,只要它不是
null
),那么可选的不是正确的工具。这种情况应该更适合由simple
if(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对不起,我没听懂。这就像说“它就在那里,因为它就在那里”,这并没有给我们太多。通常情况下,事情会在某个地方发生,因为有人决定它应该在那里,我在问这个决定背后的原因(为什么有人——代码的作者,可能是你——尽管在那个地方必须使用可选选项?)。