java Lambda
一、步骤
1、观察是否是函数式接口(接口只有一个抽象类 接口可以被 @FunctionalInterface 注解)做方法参数传递
2、如果是,用Lambda表达式
3、调用方法,以匿名内部类的形式传递参数
4、从new接口到重写方法的方法名,删除,在删除一个大括号
5、在重写方法的参数后面加上->
6、简写:参数类型可省略,若参数为一个,()可省略,若{}中只有一行代码{}可省略,若这行代码带return,retrun可省略
二、案例
1、自定义函数式接口
函数式接口
package com.wt.lambda; @FunctionalInterface public interface USB { public abstract void start(); }
主类
package com.wt.lambda; public class UsbMain { public static void main(String[] args) { // lambda 且简写 method(()-> System.out.println("鼠标开启")); } private static void method(USB usb) { usb.start(); } }
2、collection集合排序
javaBean
package com.wt.lambda; import java.util.Objects; public class Person { private String name; private Integer age; public Person() { } public Person(String name, Integer age) { this.name = name; this.age = 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; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return Objects.equals(name, person.name) && Objects.equals(age, person.age); } @Override public int hashCode() { return Objects.hash(name, age); } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
主类
package com.wt.lambda; import java.util.ArrayList; import java.util.Comparator; public class TestMain { public static void main(String[] args) { ArrayList<Person> list = new ArrayList<>(); list.add(new Person("小心", 9)); list.add(new Person("小葵", 2)); list.add(new Person("正南", 8)); // lambda 且简写 list.sort((o1, o2) -> o1.getAge() - o2.getAge()); System.out.println(list); } }