lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
为什么要用lamda表达式 ? 操作起来更方便提高编码能力,简化代码 始代码看起来更简洁干练
函数表达式 依赖于函数式接口
一 函数式接口 介绍
每个函数式接口只允许一个自定义方法 + 可以重写父类里面的方法
@FunctionalInterface //该注解助于编译器及时检查接口是否满足函数式接口定义 (可不写) interface Functiona1{ int method1(int a,int b); //int method2(int a,int b); // 如果存在第二个自定义方法 就会报错 @Override public String toString(); //这个方法可以使用 因为这个是重写父类Object的方法 }
二 lamda 表达式使用
字符串类型
@Test public void test02(){ ArrayList<String> list = new ArrayList<>(); list.add("刘备"); list.add("关羽"); list.add("张飞"); list.add("赵云"); System.out.println("jdk1.8 之前写法"); for (String s : list) { System.out.println(s); } System.out.println("jdk1.8 之后写法"); list.forEach(a-> System.out.println(a)); }
自定义学生对象
@Test public void test03() { ArrayList<Student> list = new ArrayList<>(); list.add(new Student("刘备", 40)); list.add(new Student("关羽", 37)); list.add(new Student("张飞", 35)); list.add(new Student("赵云", 30)); System.out.println("jdk1.8 之前写法 排序后"); for (Student student : list) { System.out.println(student); } Collections.sort(list, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { if (o1.getAge() > o2.getAge()) return 1; else return -1; } }); System.out.println("jdk1.8 之前写法 排序后"); for (Student student : list) { System.out.println(student); } ArrayList<Student> list1 = new ArrayList<>(); list1.add(new Student("刘备", 40)); list1.add(new Student("关羽", 37)); list1.add(new Student("张飞", 35)); list1.add(new Student("赵云", 30)); System.out.println("jdk1.8 之后写法 排序前"); list1.forEach(a -> System.out.println(a)); System.out.println("jdk1.8 之后写法 排序后"); Collections.sort(list1, (s1, s2) -> s1.compare(s1, s2)); list1.forEach(a -> System.out.println(a)); }
Student类
import java.util.Comparator; public class Student implements Comparator<Student> { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Student(String name, Integer age) { this.name = name; this.age = age; } @Override public int compare(Student o1, Student o2) { if(o1.getAge() > o2.getAge()) return 1; else return -1; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }