【问题标题】:How can I write an if block using lambda?如何使用 lambda 编写 if 块?
【发布时间】:2020-04-09 12:11:31
【问题描述】:

您能告诉我如何使用 lambda/Java 8 编写这个表达式吗?

String str = "Hello";
String x = "1"; 

if(str.equals("Hello") || str.equals("Helloo") || 
         str.equals("Hellooo") || str.equals("Hellooo...")) {
   if(x != null) {
       // do something
   } else {
       // do something else 
   }
}

【问题讨论】:

  • 有什么理由要为此使用 lambda 表达式?
  • 你有没有尝试过?你到底卡在哪里了?
  • 一般来说,我需要在我可以使用的任何地方使用 lambda 表达式,这是要求,我对此很陌生...

标签: java java-8 lambda


【解决方案1】:

您可以使用 Set 来存储您的所有称呼,然后使用 filter 和 ifPresent 来制作您的条件:

Stream.of("Hello", "Helloo", "Hellooo", "Hellooo...")
        .filter(str::equals)
        .findAny()
        .ifPresent(c -> {
            if (x != null) {
                // do something
            } else {
                // do something else
            }
        });

但在你的情况下,我想使用:

if (str.matches("Hell[o]{1,4}(\\.{4})?")) {
    if (x != null) {
        // do something
    } else {
        // do something else
    }
}

关于正则表达式,您可以根据您的输入对其进行改进,我做了一个快速的向您展示另一种解决方案。

【讨论】:

  • 您可以使用 Stream.of("Hello", "Helloo", "Hellooo", "Hellooo...") 内联它
  • 注意,如果您使用的是 Java 8,您可以将列表传递给 HashSet,例如new HashSet<>(Arrays.asList("Hello", "Helloo", "Hellooo", "Hellooo..."))
  • 我同意@Andreas,Set.of是从Java10使用的,所以最好使用Stream.of("Hello", "Helloo", "Hellooo", "Hellooo...")
  • @Mr.Polywhirl 或者更好的是 Andreas Stream.of("Hello", "Helloo", "Hellooo", "Hellooo...")的提议
  • @YCF_L Set.of 方法是在 Java 9 中引入的,我只是注意兼容性,但 Stream.of 会起作用! -- 或者,对于 Java 8:- Stream.of("Hello", "Helloo", "Hellooo", "Hellooo...").collect(Collectors.toSet())
猜你喜欢
  • 2017-08-04
  • 2021-11-05
  • 2019-01-21
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 2017-12-06
  • 2013-04-30
  • 2019-12-24
相关资源
最近更新 更多