java循环之间区别

193 阅读1分钟

1. fori和foreach

foriforeach可以通过break/continue/return来中止遍历,或执行下一次遍历。

2. objects.stream().foreach()

objects.stream().foreach(x->{});

可以使用return来实现continue的效果,也就是说如果你在一个方法的Lambda表达式中使用return时,这个方法是不会返回的,而只是执行下一次遍历。

int x = 5;
List<String> list = Arrays.asList("123", "45634", "7892", "abch", "sdfhrthj", "mvkd");
list.stream().forEach(e -> {
    if (e.length() >= x) {
        return;
    }
    System.out.println(e);
});

使用stream,最大的特点是并发执行,对于循环内业务量比较多的场景非常适合,比如数据库查询,第三方接口接口调用等耗时的操作。

我咋记得是parallestream是有并行的效果呢。

3. objects.foreach()

objects.foreach(x->{});

对于一些list使用foreach()方法,也是需要通过return来跳过当前循环,这里return相当于continue

list.forEach(e -> {
    if (e.length() >= x) {
        return;
    }
    System.out.println(e);
});

接口list继承Collection,接口Collection继承了接口IterableforEach方法是Iterable中的方法:

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}

其中default是Java8中引入的,接口如今可以包含实现类没有提供实现的方法签名了!那谁来实现它呢?缺失的方法主体随接口提供了(因此就有了默认实现),而不是由实现类提供。

代码:github.com/jinyub/Lear…

参考:

在Java8的foreach()中使用return/break/continue_lmy86263的博客-CSDN博客