Lambda表达式
Lambda表达式也称闭包,允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据。Lambda表达式用于简化java中接口式匿名内部类。被称为函数式接口的概念。函数式接口就是一个具有一个方法的普通接口。像这样的接口,可以被隐式转换为Lambda表达式。
语法:(参数1,参数2...)->{...}
1、没有参数使用Lambda表达式
2、带参数时使用Lambda表达式
3、代码块中只依据代码时使用Lambda表达式
4、代码块中有多句代码时使用Lambda表达式
5、有返回值的代码块
6、参数中使用final关键字
Lambda表达式好处:
1、代码更简洁
2、不会单独生成class文件
接口中默认方法和静态方法
interface A{
public default void print(){}
public static void method(){}
}
默认方法与静态方法并不影响函数式接口的契约,可以任意使用
示例代码:
package com.booy1;
public class LambdaTest {
public static void main(String[] args) {
//常规写法
IEat ieat = new IEatImpl();
ieat.eat();
//接口式匿名内部类写法
IEat ieat2 = new IEat() {
public void eat() {
System.out.println("eat...banner");
}
};
ieat2.eat();
//Lambda表达式写法
// IEat ieat3 = ()->{System.out.println("eat...orange");};
//没有参数时使用
// IEat ieat3 = ()->System.out.println("eat...orange");
// ieat3.eat();
//带参数时使用,参数类型可以省略
// IEat ieat3 = (thin,name)->System.out.println("eat...orange"+thin+name);
// ieat3.eat("orange","小咯");
//带参数时使用,参数的类型可以省略,代码块中有多行代码
// IEat ieat3 = (thin,name)->{
// System.out.println("eat...orange"+thing);
// System.out.println(name);
// };
// ieat3.eat("orange","小咯");
//带返回值的方法
// IEat ieat3 = (thin,name)->{
// System.out.println("eat...orange"+thing);
// return 10;
// };
// ieat3.eat("orange","小咯");
//带返回值只有一句实现代码
IEat ieat3 = (thin,name)->thing==null?1:0;
}
}
//只有一个抽象方法的接口
interface IEat{
void eat(String thing,String name);
}
//接口实现类
class IEatImpl implements IEat{
public void eat() {
System.out.println("eat...apple");
}
}
实例代码:
主类:
package com.booy1;
import java.util.Arrays;
import java.util.Comparator;
public class LambdaTest {
public static void main(String[] args) {
Student[] students = {
new Student("张三",15),
new Student("李四",25),
new Student("王麻子",18)};
// Arrays.sort(students,new Comparator<Student>() {
// public int compare(Student o1,Student o2) {
// return o1.getAge()-o2.getAge();
// };
// });
// Comparator<Student> c = (o1,o2)->o1.getAge()-o2.getAge();
Arrays.sort(students,(o1,o2)->o1.getAge()-o2.getAge());
System.out.println(Arrays.toString(students));
}
}
student类:
package com.booy1;
public class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
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 "Student [name=" + name + ", age=" + age + "]";
}
}