52-13Lambda表达式

60 阅读2分钟
Lambda表达式的前提 - lambda表达式是对 匿名内部类的简化书写格式 
1.必须要有接口(函数式接口):
2该接口必须被覆盖重写的抽象方法-只能有一个,可以有默认方法,可以有静态方法
3必须有方法使用函数式接口作为方法参数
lambda表达式书写规则: (参数类型 参数名称) -> { 代码语句 }
小括号(): 就是以前定义方法的小括号,内部写的是方法参数列表  没有参数,也不能省略
 使用匿名内部类的方式中,只保留覆盖重写后方法的()和{},在()和{}之间,添加->,其它全部省略
 简化
 1.数据类型可以省略:  	(Person p) 简化为 (p)   (Person p1,Person p2) 简化为 (p1,p2) 
 2注意: 没有参数,()不能省略 ->: 永远不能省略
 3.如果{}中只有一句话,那么{}和分号和return,全部可以省略  
 4Lambda表达式有参数有返回值  Arrays.sort(ps, new Comparator<T>() { }
      参数T是引用类型,不能直接减
    @Override: 检测子类方法是否是对父类方法的覆盖重写 
   @FunctionalInterface: 检测是否是函数是接口的
  public interface MyFunctionalInter {   }  
public class Demo01Lambda {
    public static void main(String[] args) {
        //1.匿名内部类对象的方式,创建并开启线程
        //通过匿名内部类对象的方式,给Thread对象,传递一段代码执行
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程任务A执行了...");
            }
        }).start();

        //2.lambda表达式的方式
        //通过lambda表达式的方式,给Thread对象,传递一段代码执行
        new Thread(()-> {
                System.out.println("线程任务B执行了...");
            }
        ).start(); 
    }
}

Lambda表达式有参数有返回值

 
public class Demo03Lambda { 
    public static void main(String[] args) { 
        //创建Person数组
        Person[] ps = 
        	{new Person("张三",18),new Person("李四",38),new Person("王五",28)}; 
        System.out.println("排序前: "+ Arrays.toString(ps)); 
        //1.匿名内部类的方式
        //age从小到大
        Arrays.sort(ps, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge();//age从小到大
            }
        });

        System.out.println("年龄从小到大排序后: "+ Arrays.toString(ps));

        //2.使用lambda表达式的方式
        //age从大到小
        Arrays.sort(ps,(Person p1,Person p2)->{
            return p2.getAge() - p1.getAge();
        });

        System.out.println("年龄从大到小排序后: "+ Arrays.toString(ps));
    }
}

       List集合存储多个Person对象,完成对List集合的排序,按照年龄排序
         //创建List集合对象,并添加数据
        List<Person> list = new ArrayList<>();
       
        Collections.sort(list,(Person p1,Person p2)->{
            return p2.getAge() - p1.getAge();
        }); 
         fun(new MyFunctionalInter() {
            @Override//1.匿名内部类的方式
            public void method() {
                System.out.println("匿名内部类的方式....");
            }
        });