当前位置: 首页 > 知识库问答 >
问题:

使用可选类执行If-else代码

孔君浩
2023-03-14

我在这里学习选修课的教程-https://www.geeksforgeeks.org/java-8-optional-class/其中有以下几点

String[] words = new String[10];
Optional<String> checkNull = Optional.ofNullable(words[5]);
if (checkNull.isPresent()) {
    String word = words[5].toLowerCase();
    System.out.print(word);
} else{
    System.out.println("word is null");
}

我正在尝试使用ifPresent检查可选as减少行数

Optional.ofNullable(words[5]).ifPresent(a -> System.out.println(a.toLowerCase()))

但无法进一步了解其他部分

Optional.ofNullable(words[5]).ifPresent(a -> System.out.println(a.toLowerCase())).orElse();// doesn't work```

有办法吗?

共有3个答案

谢财
2023-03-14

如果您使用的是java 9,那么可以使用ifpresentorese()method::

https://docs.oracle.com/javase/9/docs/api/java/util/Optional.html#ifPresentOrElse-java.util.function.Consumer-java.lang.Runnable-

Optional.of(words[5]).ifPresentOrElse(
   value -> System.out.println(a.toLowerCase()),
   () -> System.out.println(null)
);

如果是Java 8,那么看看下面这张很棒的备忘单:

http://www.nurkiewicz.com/2013/08/optional-in-java-8-cheat-sheet.html

柏阳炎
2023-03-14

更清楚地说,ifPresent将使用Consumer作为参数,返回类型为void,因此您不能对此执行任何嵌套操作

public void ifPresent(Consumer<? super T> consumer)

如果存在值,则使用该值调用指定的使用者,否则不执行任何操作。

参数:

消费者-如果存在值,则要执行的块

投掷:

NullPointerException-如果值存在且使用者为null

因此,使用map()

String result =Optional.ofNullable(words[5]).map(String::toLowerCase).orElse(null);

打印只是为了打印

System.out.println(Optional.ofNullable(words[5]).map(String::toLowerCase).orElse(null));
皇甫心思
2023-03-14

Java在实现中引入了类似的ifPresentOrElse。您可以将其用作:

Optional.ofNullable(words[5])
        .map(String::toLowerCase) // mapped here itself
        .ifPresentOrElse(System.out::println,
                () -> System.out.println("word is null"));

使用Java-8时,应包括一个中间可选/字符串,并用作:

Optional<String> optional = Optional.ofNullable(words[5])
                                    .map(String::toLowerCase);
System.out.println(optional.isPresent() ? optional.get() : "word is null");

也可以写成:

String value = Optional.ofNullable(words[5])
                       .map(String::toLowerCase)
                       .orElse("word is null");
System.out.println(value);

或者,如果您根本不想将值存储在变量中,请使用:

System.out.println(Optional.ofNullable(words[5])
                           .map(String::toLowerCase)
                           .orElse("word is null"));

 类似资料:
  • 你好,我有两个代码示例 if/else if/else语句 可选语句 所以我的问题是这两者在性能方面是如何比较的(我在实际代码上有大约15-20个if-else语句)? 是否值得重构代码可读性与性能之间的关系,或者是对选项的误用? 另外,如果if/else-if语句增长到100+时,性能损失是什么? 提前致谢

  • Perl条件语句有助于决策,这需要程序员指定一个或多个要由程序评估或测试的条件,以及在条件被确定为真时要执行的一个或多个语句,以及可选的其他条件如果确定条件为假,则执行语句。 以下是大多数编程语言中的典型决策结构的一般性 - 数字0,字符串'0'和“”,空列表()和undef在布尔上下文中都是false ,所有其他值都为true 。 否定真正的价值! 或not返回特殊的假值。 Perl编程语言提供

  • 本文向大家介绍C# if, if...else, if... else if ,包括了C# if, if...else, if... else if 的使用技巧和注意事项,需要的朋友参考一下 示例 该if语句用于控制程序的流程。一条if语句根据Boolean表达式的值标识要运行的语句。 对于单个语句,braces{}是可选的,但建议使用。 该if还可以有一个else条款,将在案件条件的计算结果来执

  • 我是PHP的初学者,我有这样的代码,如果和其他部分都在同一个“运行”中执行。我知道这在逻辑上是不可能的,但这就是我得到的。 以下是我的PHP代码: 所需的行为(在数据库中存储数据)都执行得很好,但是我得到的$响应是当请求标题已经存在时分配给我的错误字符串,而不是存储请求的JSON格式化数组(如果执行和其他机构,但是我得到如果身体作为反应的结果)。 我还使用Galaxy Note 4进行测试,它只显

  • if语句之后可以跟一个可选的else if...else语句,这对于使用单个if ... else if语句测试各种条件非常有用。 当使用if...else if…else语句时,请记住 - 一个if可以有零个或一个else语句,它必须在任何其他if之后。 如果语句可以有零到多个if,它们必须在else之前。 一旦else if成功,其余的if或else语句都不会被测试。 if ... else

  • if语句后面可以跟一个else if...else语句,这对于使用单个if ... else if语句测试各种条件非常有用。 当使用if, else if, else语句时,要记住几点。 一个if可以有零个或一个else的,它必须在任何其他if之后。 一个if可以有零到多个else if是,他们必须在其他之前。 一旦else if成功, else if任何其他else if else不会被测试。