当前位置: 首页 > 面试题库 >

在Java 8中,transform可选 Optional.empty中的空字符串

空夕
2023-03-14
问题内容

给定一个字符串,我需要获取一个Optional,如果字符串为null或为空,则结果将为Optional.empty。我可以这样:

String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
    ostr = Optional.empty();
}

但是,肯定有一种更优雅的方法


问题答案:

您可以使用过滤器:

Optional<String> ostr = Optional.ofNullable(ppo).filter(s -> !s.isEmpty());

如果ppo为null或为空,则将返回一个空的Optional 。



 类似资料:
  • 给定一个字符串,我需要得到一个可选,如果字符串为空或空,结果将是Optional.empty.我可以这样做: 但肯定有更优雅的方式。

  • 问题内容: 我希望对一个值建模,该值可以有两种可能的形式:不存在或字符串。 自然的方式来做到这一点是,或者,或者,等。然而,Go没有变异类型是这样的。 然后,我认为在Java,C等之后,替代方案将是可空性或在Go中。但是,不是Go类型的成员。 搜索后,我想到使用type 。这可能有效,但看起来很尴尬(例如,我无法以与获取结构文字的地址相同的方式获取字符串文字的地址)。 在Go中为这种值建模的惯用方

  • 在Java8中,可以返回而不是。Java8文档说,可选的是“一个容器对象,它可以包含非空值,也可以不包含非空值。如果存在一个值,isPresent()将返回true,而get()将返回该值。” 在实践中,这为什么有用呢?另外,有没有使用作为首选项的情况?那表演呢?

  • 我有一个StringBuffer类型的变量,它有null字符,即“\0”中间体。我可以用null字符正确打印变量。但是当我试图在Oracle表中插入这个变量时,我不能插入整个StringBuffer变量;只有“\0”之前的部分。我插入这个变量的列的数据类型为varchar2(50)。我不知道为什么会这样。可能是oracle不允许字符串带有null术语字符中间体。我知道一旦在字符串中遇到“\0”,它

  • 我想通过分隔符将字符串分成两个字符串: 这意味着第一个字符串将包含之前的字符,第二个字符串将包括