示例
// 创建集合
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//lambda表达式
//1、正常遍历
list.forEach(item->System.out.print(item));
//结果:abcd
//2、条件遍历
list.forEach(item->{
if("b".equals(item)) {
System.out.print(item);
}
});
//结果:b
foreach源码
package java.lang;
import java.util.Iterator;
import java.util.Objects;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
public interface Iterable<T> {
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
}
可以看到:forEach()方法是Iterable<T>接口中的一个方法。Java容器中,所有的Collection的子类(List、Set)会实现Iteratable接口以实现forEach()功能。forEach()方法的参数是Consumer类型,它是Java8新增的一个消费型函数式接口,其中的accept(T t)方法代表了接受一个输入参数并且无返回的操作。