Lambda表达式
-
作用:用于简化匿名内部类的方法
-
格式:
(被重写方法的形参列表)->{
被重写方法体代码。
} -
注意:Lambda表达式只能用来简化函数式接口的匿名内部类
什么是函数式接口
- 只能含有一个抽象方法的接口
传统的方法
public class LambdaText {
public static void main(String[] args) {
Animal1 a=new Animal1(){
@Override
public void run() {
System.out.println("动物快速的跑");
}
};
a.run();
}
}
//生成一个函数式接口
interface Animal1 {
public abstract void run();
}
采用Lambda表达式
public class LambdaText {
public static void main(String[] args) {
Animal1 a=()-> {
System.out.println("动物快速的跑");
};
a.run();
}
}
interface Animal1 {
public abstract void run();
}
Lambda表达式的省略写法
- 参数类型可以不写;
- 如果只有一个参数,参数类型可以省略,()可以不写;
- 如果方法体只有一行代码,可以省略大括号不写,同时要省略分号,如果这一行是return语句,也要省略。
增强for循环
- 格式
-for(元素类型名 变量名 :数组或集合)
{
}
for (String str: c){
System.out.println(str);
}
Lambda表达式遍历集合
- 需要使用Collection如下方法来实现
- forEach的源码函数
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
使用Lambda表达式案例如下
public class Collectiondemo {
public static void main(String[] args) {
Collection <String> c=new ArrayList<>();
c.add("小万");
c.add("小王");
c.add("小红");
c.add("小绿");
System.out.println(c);
c.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
}
}
- 结果如下: