Lambada表示,本质上就是一个匿名内部类,参照JS中的箭头函数很好理解,不过。
不过他只针对函数式编程接口(一个接口,内含一个抽象方法)
public class Book {
// 匿名内部类
//static A a = new A(){
// @Override
// public int add(int index) {
// System.out.println(index);
// return 0;
// }
// };
// Lambda表达式
static A a = (int a)->{
System.out.println(a+"labada");
return a;
};
public static void main(String[] args) {
a.add(2);
}
}
// 接口
interface A{
// 一个抽象方法
int add(int index);
default boolean ind(){
System.out.println(212);
return true;
}
}
1.参数类型可以省略,
2.方法体中只有一条语句,也就是只有返回值,可以把retrurn和花括号省略。
// Lambda表达式 static A a = ( a)-> a;
用通用构造方法和方法去,代替逻辑(我们对弈一个Lam表达式可能同样的实现逻辑,避免创造多个,封装到这些方法里面)
public class Book {
public static void main(String[] args) {
// 当一个类的构造方法的(new 的类型),与你函数编程接口方法的返回值一杨,并且传参一样就行。
// 当方法,返回值和参数一样就可以。
Animal dw = Dog::new;
Animal dw1 = Dog::getDog;
dw.dog(10);
dw1.dog(10);
}
}
class Dog{
// 构造
public Dog(int age ){
System.out.println("年龄"+age);
}
// 方法
public static Dog getDog(int age){
System.out.println("年龄"+age);
return new Dog(age);
}
}
interface Animal{
//
Dog dog(int age);
}
Lambda表示实例
public class Book {
public static void main(String[] args) {
ArrayList<Dog> dogs1 = new ArrayList<>();
dogs1.add(new Dog(1,"qhx"));
dogs1.add(new Dog(2,"qhx1"));
dogs1.add(new Dog(3,"qhx2"));
//排序集合
dogs1.sort((o1, o2) -> o1.getAge() - o2.getAge());
// 遍历集合
PrintStream out = System.out;
dogs1.forEach(out::println);
}
}
@Data
class Dog{
private int age;
private String name;
public Dog(int age, String name) {
this.age = age;
this.name = name;
}
}