Lambda表达式引入
假设我们现在有一个遍历集合List的需求
a.首先我们通过Lambda表达式的写法实现:
代码如下(示例):
public class MyLambdaTest { public static void main(String[] args) { List<String> stringList = Arrays.asList("肌肉猿","肌肉猿爱编程","程序员非晚"); stringList.forEach(s -> { System.out.println(s); }); }
程序运行结果:
b.我们通过匿名内部类的形式实现程序运行结果
public class MyLambdaTest2 { public static void main(String[] args) { List<String> stringList = Arrays.asList("肌肉猿","肌肉猿爱编程","程序员非晚"); // 通过匿名内部类的形式替代Lambda表达式 stringList.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); } }
程序运行结果:
上述代码分析:
foreach()方法是Iterable接口的一个默认方法,在下面的方法的参数列表中我们可以知道,该方法需要一个Consumer类型的参数,方法体的内容则是一个for循环,进行对每一个对象的便利,最终处理方法则是调用accept()方法。
default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
当我们继续查看Consumer的accept(T)方法,我们不难得出Consumer是一个函数式接口(该接口的详细讲解见我专栏里的文章有详解)。