lambda表达式的简单使用

新时代程序员必须掌握:lambda 表达式、链式编程、函数式接口Stream 流式计算

lambda表达式的简单实现

概念

  • λ 希腊字母表中排序第十一位的字母,英语名称为 Lamda。
  • 可以用来避免匿名内部类定义过多。
  • 其实质属于函数式编程的概念。(也就是说必须是函数式接口才能使用lambda表达式)

函数式接口定义

任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。

//如下方多线程Runnable接口就是一个函数式接口
public interface Runnable{
    public abstract void run();
}

示例1:我们来演示各种调用接口实现类的方法(观察如何从复杂到简单)

正常调用

public class LambdaExample01 {
    public static void main(String[] args) {
        ILike like = new Like();
        like.lamda();
    }
}
// 1.定义一个函数式接口
interface ILike {
    void lamda();
}
// 2.实现类
class Like implements ILike {
    @Override
    public void lamda() {
        System.out.println("I like lambda");
    }
}

静态内部类方式的调用

public class LambdaExample02 {
    //2. 静态内部类
    static class Like implements ILike {
        @Override
        public void lamda() {
            System.out.println("I like lambda");
        }
    }
    public static void main(String[] args) {
        ILike like = new Like();
        like.lamda();
    }
}
// 1.定义一个函数式接口
interface ILike {
    void lamda();
}

局部内部类方式调用

public class LambdaExample03 {
    public static void main(String[] args) {
        //2.局部内部类
        class Like implements ILike {
            @Override
            public void lamda() {
                System.out.println("I like lambda");
            }
        }
        ILike like = new Like();
        like.lamda();
    }
}
// 1.定义一个函数式接口
interface ILike {
    void lamda();
}

匿名内部类的调用

public class LambdaExample04 {
    public static void main(String[] args) {
        //2.匿名内部类,没有类的名称,必须借助接口或者父类
        ILike like = new ILike() {
            @Override
            public void lamda() {
                System.out.println("I like lambda");
            }
        };
        like.lamda();
    }
}
// 1.定义一个函数式接口
interface ILike {
    void lamda();
}

lambda方式调用

public class LambdaExample05 {
    public static void main(String[] args) {
        //2.lamda简化
        ILike like = () ->{
            System.out.println("I like lambda");
        };
        like.lamda();
    }
}
// 1.定义一个函数式接口
interface ILike {
    void lamda();
}

示例2:带有参数的函数式接口

public class LambdaExample06 {
    public static void main(String[] args) {
        ILove love=null;
         // 1.lambda 带有参数类型的写法
        love = (int a) -> {
            System.out.println("I love you -->" + a);
        };
        // 2.lambda简化1 不需要带有参数类型
        love = (a) -> {
            System.out.println("I love you -->" + a);
        };
        // 3.lambda简化2 把括号去掉 (如果有多个参数就不能去掉括号)
        love = a -> {
            System.out.println("I love you -->" + a);
        };
        // 4.lambda简化 如果只有一行语句可以去掉{}
        love = a -> System.out.println("I love you -->" + a);

        /**总结:
         * {}简略的条件是只能有一行代码,多行{}就不能简略了
         * 前提是接口为函数式接口(只能有一个方法)
         * 多个参数也可以去掉参数类型,要去掉就都去掉,但必须加上()
         */
        love.love(520);
    }
}

interface ILove {
    void love(int a);
}

使用场景:因为Runable接口也是函数式接口,所有可以使用lambda表达式。

//Thread implements Runnable(源码)
new Thread (()->System.out.println("多线程学习。。。。")).start();

参考课程:狂神学java

posted @ 2021-04-19 10:14  懒鑫人  阅读(214)  评论(0编辑  收藏  举报