Java Lambda 表达式

JDK8的新特性->Lambda表达式,也可称之为闭包。使用Lambda表达式可以让代码变得更加简洁紧凑。

Lambda表达式对接口的要求:Lambda表达式规定接口中只能有一个需要实现的方法,而不是接口中只能有一个方法。(jdk 8 中有另一个新特性:default, 被 default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响 Lambda 表达式的使用。)

通过例子来看一下,代码逐渐简洁的一个过程,更好的理解Lambda表达式:

1.外部类

package javase;

public class TestLambda {
    public static void main(String[] args) {
        InLambda inLambda = new InLambdaImpl();
        inLambda.testLam();
    }
}

// 函数式接口
interface InLambda{
    // 无参函数
    void testLam();
}

// 外部类
class InLambdaImpl implements InLambda{

    @Override
    public void testLam() {
        System.out.println("我是外部类");
    }
}

运行结果:

2.静态内部类

package javase;

public class TestLambda {
    // 静态内部类
    static class InLambdaImpl implements InLambda{

        @Override
        public void testLam() {
            System.out.println("我是静态内部类");
        }
    }
    public static void main(String[] args) {
        InLambda inLambda = new InLambdaImpl();
        inLambda.testLam();
    }
}

// 函数式接口
interface InLambda{
    // 无参函数
    void testLam();
}

运行结果:

3.局部内部类

package javase;

public class TestLambda {

    public static void main(String[] args) {
        //局部内部类
         class InLambdaImpl implements InLambda{

            @Override
            public void testLam() {
                System.out.println("我是局部内部类");
            }
        }
        InLambda inLambda = new InLambdaImpl();
        inLambda.testLam();
    }
}

// 函数式接口
interface InLambda{
    // 无参函数
    void testLam();
}

运行结果:

4.匿名内部类

package javase;

public class TestLambda {

    public static void main(String[] args) {
        InLambda inLambda = new InLambda() {
            @Override
            public void testLam() {
                System.out.println("我是匿名内部类");
            }
        };
        inLambda.testLam();
    }
}

// 函数式接口
interface InLambda{
    // 无参函数
    void testLam();
}

运行结果:

现在我们来用Lambda表达式来代替函数式接口:

package javase;

public class TestLambda {

    public static void main(String[] args) {
        InLambda inLambda = () -> {
            System.out.println("我是Lambda");
        };
        inLambda.testLam();
    }
}

// 函数式接口
interface InLambda{
    // 无参函数
    void testLam();
}

运行结果:

可以发现Lambda 表达式大大的减少了我们的代码量,而且他还可以更加精简。

package javase;

public class TestLambda {

    public static void main(String[] args) {
        // 无参函数
        InLambda inLambda = () -> {
            System.out.println("我是Lambda");
        };
        inLambda.testLam();
        // 对于只有一句函数体的,可以省略花括号
        InLambda inLambda2 = () -> System.out.println("我是Lambda2");
        inLambda2.testLam();
        // 有参函数
        InLambda2 in2 = (int a) -> System.out.println("Lambda一个有参函数"+ a);
        in2.testLam(5);
        // 可以省略参数类型
        in2 = (a) -> System.out.println("Lambda一个参数函数:省略参数类型" +a);
        in2.testLam(4);
        // 省略小括号
        in2 = a -> System.out.println("Lambda一个有参函数:省略小括号:"+ a);
        in2.testLam(6);
    }
}

// 函数式接口
interface InLambda{
    // 无参函数
    void testLam();
}

interface InLambda2{
    // 有参函数
    void testLam(int a);
}

根据B站视频做的总结:https://www.bilibili.com/video/BV1V4411p7EF?p=10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值