forEach 循环时 return 语句 结束不了循环

  public static void main(String[] args) {

        List stringList = new ArrayList<>(10);
        stringList.add("我");
        stringList.add("是");
        stringList.add("好");
        stringList.add("人");
        stringList.add("你");
        stringList.add("知");
        stringList.add("道");
        stringList.add("吗");

        for (String s : stringList) {
            if ("是".equals(s)){
                return;
            }
            System.err.println("ssss--" + s);
        }


        stringList.stream().forEach(item -> {
            if ("是".equals(item)){
                return;
            }
            System.err.println(item);
        });

        stringList.forEach(item -> {
            if ("是".equals(item)){
                return;
            }
            System.err.println(item);
        });


    }

上面三种遍历代码方式 大家可以想一下 结果是什么?

方式一结果:

 方式二结果:

forEach 循环时 return 语句 结束不了循环_第1张图片

 方式三结果:

forEach 循环时 return 语句 结束不了循环_第2张图片

神奇吗?朋友们

原因

forEach 循环遍历对象的时候底层是使用迭代器进行迭代的,即该对象必须直接或者间接的实现了Iterable接口,一般以able结尾代表某种能力,实现了iterable代表给予了实现类迭代的能力。

这个 forEach 是 lambda 表达式相关的内容,forEach 的参数是一个消费者,也就是消费一个数据。方法中出现一个 return,那么仅仅只能终止当前方法的执行,并不影响循环整体的执行,即并不能提前终止循环。 相当于我们正常 for循环中continue使

你可能感兴趣的:(Java,java,开发语言)