Kotlin 中的多条件循环
众所周知,在 Kotlin 中,循环会尽可能地编译为优化的循环。例如,如果您遍历一个数字范围,则字节码将根据普通 int 值编译为相应的循环,以避免创建对象的开销。条件循环对于您选择的任何编程语言都很常见。如果将多个条件应用于循环,则称为多条件循环。 Java中的多条件循环的一个简单示例如下所示:
Kotlin
import java.io.*;
class GFG {
public static void main (String[] args) {
int [] data = {5, 6, 7, 1, 3, 4, 5, 7, 12, 13};
for (int i=0; i<10 && i < data[i];i++) {
System.out.println (data[i]);
}
}
}
Kotlin
(0..9) .asSequence ( ) .takeWhile {
it
Kotlin
(0..9).takeWhile {
println{"inside takewhile"}
it
Kotlin
(0..9).asSequence().takewhile {
printin ("Inside takewhile")
it
前面的执行代码会打印出 5、6 和 7。让我们看看如何在 Kotlin 中使用多条件循环。我们将在 Kotlin 中研究同一事物的函数式方法
例子
前面的多条件循环可以用 Kotlin 编写,如下所示:
科特林
(0..9) .asSequence ( ) .takeWhile {
it
它很好,很干净,绝对不碍眼。
- 我们使用了 takeWhile ,它返回一个包含满足给定谓词(在本例中为 i
- 尽管takewhile返回满足给定谓词的第一个元素,但您可能会认为它会首先评估完整范围,然后传递给forEach 。
- 如果我们没有使用 .序列()。我们将范围转换为Sequence
,因此,它被延迟评估。简而言之,它不会处理带有 . takeWhile { ... } 并且只会在 .forEach { 时一一检查。 . . } 处理下一个项目。
首先,我们将对Iterable
科特林
(0..9).takeWhile {
println{"inside takewhile"}
it
输出:
Inside takeWhile
Inside takeWhile
Inside takeWhile
Inside takewhile
Inside forEach
Inside forEach
Inside forEach
如您所见,该范围首先使用takewhile处理(返回 0、1、2),然后发送到forEach进行处理。现在,让我们看看惰性版本:
科特林
(0..9).asSequence().takewhile {
printin ("Inside takewhile")
it
输出:
Inside takewhile
Inside forEach
Inside takewhile
Inside forEach
Inside takewhile
Inside forEach
Inside takewhile
正如您在前面的示例中看到的,仅当使用 forEach处理项目时才会评估takewhile 。这是Sequence