JDK8中的增强for循环forEach()是如何通过Lambda表达式实现的

首先看看传统的增强for循环

for (String a : list) {

System.out.println(a);

}

再看看JDK8中的增强for循环

list.forEach(System.out::println)

首先明确一点,lambda表达式引用非抽象方法时,需要通过一个函数式接口,这个接口中的抽象方法
的参数和返回值类型必须和非抽象方法一致

这里通过lambda表达式函数式接口Consumer 的抽象方法accept引用了System.out类下的静态方法println

看一下forEach方法:

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}
JDK8里定义的函数式接口Consumer :
@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

这样一来通过 lambda 表达式的方式遍历集合中的元素,list.forEach(System.out::println) 就很好理解了,
Consumer<? super T> action=System.out::println   
执行action.accept(t)相当于执行了System.out.println(t);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值