【问题标题】:Does Java 8 provide a good way to repeat a function based on specific condition?Java 8 是否提供了一种根据特定条件重复功能的好方法?
【发布时间】:2021-04-12 19:28:04
【问题描述】:

我正在使用旧式 while 循环,如下所示:

int i = 1, n = 5;
while(i <= n) {
    if (doSomething()) { 
        break;
    }
    i++;
}

是否有可能在 Java 8 中以一种好的方式做到这一点?

【问题讨论】:

  • while 循环有什么“不好”的地方?它有效、高效、易于理解……?
  • 在您的示例中,doSomething 不依赖于 i,因此它在每次迭代时返回 true 或 false。您应该更具体地了解实际上下文...
  • 你是否需要知道重复结束时i 的值是多少?
  • for(int i = 1, n = 5; i &lt;= n &amp;&amp; !doSomething(); i++) { … }

标签: java loops while-loop java-8


【解决方案1】:

您可以使用IntStreamfindFirst 短路端子操作来做到这一点。当 doSomething() 方法返回 true 时,流管道的执行将被终止

IntStream.range(1,5)
         .filter(i -> doSomething())
         .findFirst();

【讨论】:

    【解决方案2】:

    即使你提到了Java 8,如果你打算使用Java 9或更高版本并且需要知道循环执行的次数,那么请执行以下操作:

    long count = IntStream.range(1,6)
                          .takeWhile(i -> !doSomething()) // loop continued till doSomething is true
                          .count();
    

    takeWhile 是在 Java 9 中引入的。

    【讨论】:

      【解决方案3】:

      简单的旧方法:

      while(i <= n && !doSomething()) { 
          // do something here
          i++;
      }
      

      非常简洁明了。

      【讨论】:

        【解决方案4】:

        这更整洁:

        for (int i = 0; i < 5 && !doSomething(); i++);
        

        【讨论】:

        • 但循环结束后i 将不在范围内。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多