使用Lambda表达式简化代码

理解Function Interface(函数式接口)是学习Java8 Lambda表达式的关键所在;

为什么使用Lambda表达式

1、避免匿名内部类定义过多;
2、代码更简洁;
3、去掉一些无意义的代码,留下代码的核心;
4、其实质是函数式编程。

函数式接口定义

1、任何接口,倘若只包含一个唯一的抽象方法,那么他就是一个函数式的接口;

public interface Runnable{
	public abstract void run();
}

2、对于函数式接口,我们都可以通过Lambda表达式来创建该接口对象。

测试样例代码:

public class LambdaTest2 {
    //静态内部类
    static class TestLambda2 implements ItestLambda{

        @Override
        public void buyHouse(String method,String name) {
            System.out.println("使用【"+method+"】方式,我们准备买【"+name+"】的房子。");
        }
    }

    public static void main(String[] args) {
        //静态内部类
        ItestLambda test2=new TestLambda2();
        test2.buyHouse("静态内部类","东投-海棠之恋");
        //局部内部类
        class TestLambda2 implements ItestLambda{
            @Override
            public void buyHouse(String method,String name) {
                System.out.println("使用【"+method+"】方式,我们准备买【"+name+"】的房子。");
            }
        }
        test2=new TestLambda2();
        test2.buyHouse("局部内部类","南昌旭辉中心");
        //匿名内部类
        test2=new ItestLambda() {
            @Override
            public void buyHouse(String method, String name) {
                System.out.println("使用【"+method+"】方式,我们准备买【"+name+"】的房子。");
            }
        };
        test2.buyHouse("匿名内部类","金科集美天辰");

        //lambda表达式
        test2=(String method,String name)->{
            System.out.println("使用【"+method+"】方式,我们准备买【"+name+"】的房子。");
        };
        test2.buyHouse("lambda表达式","赣电东方城");

    }

}

interface ItestLambda{
    void buyHouse(String method,String name);
}

class TestLambda2 implements ItestLambda{

    @Override
    public void buyHouse(String method,String name) {
        System.out.println("使用【"+method+"】方式,我们准备买【"+name+"】的房子。");
    }

内部类

内部类就是在一个类的内部定义了一个类,比如在Class
A中定义了一个B类,那么B类对于A类来说就是内部类,A类对于B类来说就是外部类了

1、成员内部类
我们可以使用成员内部类来获得外部的某些私有的属性
2、局部内部类
局部内部类写在外部类的某个代码块或者方法块中,如果只在某个方法或块中创建这个类的某些对象,可以使用局部内部类。
3、匿名内部类
匿名内部类是在new的后面,可以用来实现一个接口或者继承一个类。
4、静态内部类
在声明的类的时候加上static关键字,他与外部类的属性,方法是并列关系。

Lambda表达式简化

1、Lambda表达式只能有一行的情况下才能简化成一行,如果有多行,必须要用代码块包裹;
2、前提是接口必须为函数式接口(任何接口如果只包含唯一的一个抽象方法,那他就是函数式接口);
3、方法包含多个参数可以去掉参数类型,要去掉的话就都去掉,必须加上括号

 //lambda表达式
    test2=(String method,String name)->{
        System.out.println("使用【"+method+"】方式,我们准备买【"+name+"】的房子。");
    };
    test2.buyHouse("lambda表达式","赣电东方城");

    //lambda表达式简化
    test2=(method,name)-> System.out.println("使用【"+method+"】方式,我们准备买【"+name+"】的房子。");

    test2.buyHouse("lambda简化","绿地玫瑰城");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值