lambda表达式与函数式接口是结合使用的。
函数式接口:接口中只有一个抽象方法的接口,其中可以包括default修饰,static 修饰的实例方法。函数式接口可以在接口上添加@FuncationInterface注解(也可以不加),实现方式可以与普通接口一样,通过定义一个实现类实现该接口,也可以通过匿名类形式实现,新增的实现方式通过lambda表达式。
lambda表达式可以理解为:对函数式接口和其中抽象方法的实现。当需要一个函数式接口参数的方法时,我们就可以给其传递一个对应的lambda表表达式作为参数,执行时会自动执行函数式接口中的唯一方法,也就是传递过去的lambda表达式。
函数式接口例如:Comparator接口
import java.util.Arrays; import java.util.Comparator; import java.util.List; public class Java8Test1 { public static void main(String[] args) { /** * 传统实现方式 */ String [] str = {"a","v","n","r"}; List<String> asList = Arrays.asList(str); System.out.println("初始状态:"+asList); asList.sort(new Comparator<String>() { @Override public int compare(String o1, String o2) { // TODO Auto-generated method stub return o1.compareTo(o2); } }); System.out.println("传统方式:"+asList); /** * 采用lambda表达式方式 方式一 */ String [] str1 = {"a","v","n","r"}; List<String> list = Arrays.asList(str); //lambda表达式对compartor函数数式接口实现 Comparator<String> comparator = (String o1,String o2)->(o1.compareTo(o2)); list.sort(comparator); System.out.println("lambda表达式返回值:"+list); /** * 采用lambda表达式 方式二 */ String [] str2 = {"a","v","n","r"}; List<String> list1 = Arrays.asList(str); //将lambda表达式作为参数传递 list1.sort((String o1,String o2)->(o1.compareTo(o2))); System.out.println("lambda表达式直接作为参数:"+list1); } }