如何过滤 Optional.empty in java 8

How to filter Optional.empty in java 8

我想用 0 过滤值以打印无效消息,但结果是 Optional.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);

需要 return 输入 Optional<String>

预期输出 - Invalid
实际输出 - Optional.empty

已更新

需要 return 输入 String

预期输出 - Invalid value 0
实际输出 - Optional.empty

不使用过滤器怎么样。

String l3 = l2
    .map(Object::toString)
    .orElse("invalid");

如果您使用的是 Java 9+,您可以使用 or,它需要一个 替代 Optional 如果当前为空:

Optional<String> l3 = l2.filter(String::isEmpty)
                       .or(() -> Optional.of("invalid"));

无需使用 Optional 或过滤器,您只需要:

String l3 = l > 0 ? l.toString() : "Invalid";

如果你想处理 null 那么:

String l3 = (l != null && l > 0) ? l.toString() : "Invalid";

如果要在 Invalid case 中显示数字,则:

String l3 = (l != null && l > 0) ? l.toString() : String.format("Invalid %d", l);