前言
1)lambda是一种匿名表达式,匿名函数,可以理解为一段可以传递的代码(将代码像数据一样传递),使得代码更加简洁,灵活。
2)只有参数列表和方法体
3)JDK8以上,使用IDEA注意到项目和模块的JDK,如果是maven构建,特别注意编译的JDK版本,因为maven项目会使用pom引入的依赖
1、接口对象
package org.example.base;
/**
* 这样创建的接口对象必须重写所有方法,所以接口中最好是只有一个接口方法
*/
public class inter {
public static void main(String[] args) {
Inter1 i1 = ()->{System.out.println("无参数无返回值");};
Inter2 i2 = (int a)->{System.out.println("一个参数无返回值");};
Inter3 i3 = (int a)->{System.out.printf("一个参数有返回值:");return a;};
Inter4 i4 = (int a,int b)->{System.out.printf("两个参数有返回值:");return a+b;};
i1.noArg();
i2.oneArg(1);
System.out.println(i3.oneArgAndReturn(1));
System.out.println(i4.TwoArgsAndReturn(1,2));
}
}
interface Inter1{void noArg();}
interface Inter2{void oneArg(int a);}
interface Inter3{int oneArgAndReturn(int a);}
interface Inter4{int TwoArgsAndReturn(int a,int b);}
2、精简语法
1)参数类型可以省略
2)假如只有一个参数,()括号可以省略,没有参数是不可以省略的
3)如果方法体只有一条语句,大括号可以省略
4)如果方法体中唯一的语句是return返回语句,那省略大括号的同时return也要省略
package org.example.advanced;
public class inter {
public static void main(String[] args) {
Inter1 i1 = ()->{System.out.println("无参数无返回值");};
Inter2 i2 = (a)->System.out.println("一个参数无返回值");//省略大括号,省略数据类型
Inter3 i3 = a->{System.out.printf("一个参数有返回值:");return a;};//省略括号,省略数据类型
Inter4 i4 = (a,b)->{System.out.printf("两个参数有返回值:");return a+b;};//省略数据类型
Inter4 inter4 = (a,b)->a-b;//省略大括号,省略return,省略数据类型
i1.noArg();
i2.oneArg(1);
System.out.println(i3.oneArgAndReturn(1));
System.out.println(i4.TwoArgsAndReturn(1,2));
System.out.println("减法:"+inter4.TwoArgsAndReturn(2,1));
}
}
interface Inter1{void noArg();}
interface Inter2{void oneArg(int a);}
interface Inter3{int oneArgAndReturn(int a);}
interface Inter4{int TwoArgsAndReturn(int a,int b);}
3、方法引用
静态方法:类名::静态方法名
实例方法:类名::实例方法名
public class inter {
public static void main(String[] args) {
Inter1 inter1 = inter::testStatic;//静态方法引用
Inter1 inter11 = new inter()::test;//实例方法引用
}
public static int testStatic(int a){return a-1;};
public int test(int a){return a-1;};
}
interface Inter1 {
int compute(int a);
}
4、构造引用
public class inter {
public static void main(String[] args) {
Inter1 i1 = Exception::new;
}
}
interface Inter1{
Exception getException();
}
5、集合比较和遍历
public class T_Sort {
public static void main(String[] args) {
List<Person> list = new ArrayList();
list.add(new Person("ly",2));
list.add(new Person("ly2",3));
list.add(new Person("l2",5));
list.add(new Person("y2",1));
list.add(new Person("l",4));
list.sort((o1, o2) -> o1.getAge() - o2.getAge());
System.out.println(list);
list.forEach(System.out::println);
}
static class Person {
String name;
int age;
public Person(){this(null,-1);}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
}
6、FunctionalInterface
允许接口定义静态方法和默认方法(default修饰)以及Object中得public方法,只能有一个抽象方法