43.Lambda表达式

1.概述

2.体验lambda

    public static void main(String[] args) {
        //匿名内部类启动线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类的方式启动线程");
            }
        }).start();
        //    lambda表达式启动线程
        new Thread(() ->{
            System.out.println("lambda表达式的方式启动线程");
        }).start();
    }

3.lambda表达式标准格式

 

 4.Lambda表达式练习

练习1(接口抽象方法没有参数):

public interface Eatable {
public abstract void eat();
}
public class EatableImpl implements Eatable {
    @Override
    public void eat() {
        System.out.println("吃东西");
    }
}
public class EatableDemo {
    public static void main(String[] args) {
        //1.创建接口实现类对象实现调用eat()方法
        EatableImpl eatable = new EatableImpl();
        useEatable(eatable);
//        2.创建接匿名内部类实现调用eat()方法
        useEatable(new Eatable() {
            @Override
            public void eat() {
                System.out.println("吃东西");
            }
        });
//        3.Lambda表达式实现调用eat()方法
        useEatable(() -> {//"()"就代表Eatable接口里面唯一的抽象方法:eat();因为eat()不需要参数,所以()也没有参数
            System.out.println("吃东西");
        });
    }

    private static void useEatable(Eatable e) {
        e.eat();
    }
}

练习2(接口抽象方法带形参):

public interface Fly {
    void fly(String s);
}
public class FlyDemo {
    public static void main(String[] args) {
        flyTo(new Fly() {
            @Override
            public void fly(String s) {
                System.out.println("我要飞到" + s);//我要飞到北京
            }
        });
        flyTo((String s) -> {
            System.out.println("我要飞到" + s);
        });
    }

    private static void flyTo(Fly fly) {
        fly.fly("北京");
    }
}

练习3(接口抽象方法带形参,且有返回值):

public interface Add {
    int add(int a,int b);
}

public class AddDemo {
    public static void main(String[] args) {
         addDo(new Add() {
            @Override
            public int add(int a, int b) {
                return a + b;
            }
        });
        addDo((int a, int b) -> {
            return a + b;
        });

    }

    private static void addDo(Add add){
         int sum=add.add(1,2);
         System.out.println(sum);//3

    }
}

5.Lambda表达式省略模式

public interface Fly {
    void fly(String s);
}
public interface Add {
    int add(int a,int b);
}
public class Demo {
    public static void main(String[] args) {
         addDo(new Add() {
            @Override
            public int add(int a, int b) {
                return a + b;
            }
        });
        addDo((int a, int b) -> {
            return a + b;
        });
//        1.参数类型可以省略,但是多个参数的时候,不能只省略一个参数的类型
        addDo((a,b)->{
            return a+b;
        });
//        2.如果参数只要一个,那么小括号可以省略
        flyTo(new Fly() {
            @Override
            public void fly(String s) {
                System.out.println("我要飞到:"+s);
            }
        });
        flyTo(s->{
            System.out.println("我要飞到:"+s);
        });
//        3.如果代码块的语句只有一条,可以省略大括号和分号,如果是return语句,要省略return;
        flyTo(s-> System.out.println("我要飞到"+s));
        addDo((a,b)->a+b);
    }

    private static void addDo(Add add){
         int sum=add.add(1,2);
         System.out.println(sum);
    }
    public static void flyTo(Fly fly){
        fly.fly("北京");
    }
}

6.Lambda表达式注意事项

6.Lambda表达式和匿名内部类的区别

 

原文地址:https://www.cnblogs.com/luzhanshi/p/13198626.html