gpt4 book ai didi

for-loop - 使用 ForEach 转换为 lambda 表达式以中断 for 循环

转载 作者:行者123 更新时间:2023-12-02 20:15:51 25 4
gpt4 key购买 nike

以下代码在 for 循环中具有中断行为:

package test;

import java.util.Arrays;
import java.util.List;

public class Test {

private static List<Integer> integerList = Arrays.asList(1, 2, 3, 4);

public static void main(String[] args) {
countTo2(integerList);
}

public static void countTo2(List<Integer> integerList) {

for (Integer integer : integerList) {
System.out.println("counting " + integer);
if (integer >= 2) {
System.out.println("returning!");
return;
}
}
}
}

尝试使用 Lambda 使用 forEach() 来表达它将会改变行为,因为 for 循环不再中断:

public static void countTo2(List<Integer> integerList) {

integerList.forEach(integer -> {
System.out.println("counting " + integer);
if (integer >= 2) {
System.out.println("returning!");
return;
}
});
}

这实际上是有意义的,因为 return; 语句仅在 lambda 表达式本身(内部迭代内)中强制执行,而不是在整个执行序列中强制执行,因此有没有办法获得所需的结果使用 lambda 表达式的行为(打破 for 循环)?

最佳答案

以下代码在逻辑上与您的代码等效:

public static void countTo2(List<Integer> integerList) {
integerList.stream()
.peek(i -> System.out.println("counting " + i))
.filter(i -> i >= 2)
.findFirst()
.ifPresent(i -> System.out.println("returning!"));
}

如果您对任何事情感到困惑,请告诉我!

关于for-loop - 使用 ForEach 转换为 lambda 表达式以中断 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46162203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com