lambd表达式和方法引用

自己理解:

  • 就是将 -> 左边的部分当作形参传入 右边的匿名内部类,通过形参 得到内部类的运行结果

lambda表达式:

在Lambda表达式中,将其划分了几块。这一行就是lambda表达式。() -> System.out.println(“使用Lambda表达式”);下面我们对lambda的格式进行一个介绍:

(1)左边括号:lambda的形参列表,就好比是我们定义一个接口,里面有一个抽象方法,这个抽象方法的形参列表。

(2)箭头:lambda的操作符,所以你看见这个箭头心中知道这是一个lambda表达式就可以了。

(3)右边lambda体:就好比是我们实现了接口中的抽象方法。

  • 当遇到::时,也是lambda的一种形式,

方法引用(::):
有时候,lambda体可能仅仅调用一个已存在的方法,而不做任何其它事,对于这种情况,通过一个方法名字来引用这个已存在的方法会更加清晰。

所以我们来总结:方法引用(::)是一个更加紧凑,易读的 Lambda 表达式,注意方法引用是一个 Lambda 表达式,其中方法引用的操作符是双冒号 “::”

我们可以通过自定义方法来模拟一下:

public class Test {
    public static void main(String[] args) {

        //传统的方式来实现MyFunction/得到一个实现接口的对象 可以使用
        //匿名内部类
        //MyFunction<Desk, String> hf = new MyFunction<Desk, String>() {
        //    @Override
        //    public String apply(Desk desk) {
        //        return "hello desk";
        //    }
        //};
        //String val = hf.apply(new Desk());
        //System.out.println("val-" + val);

        MyFunction<Desk,String> hf2 = Desk::getBrand;

        String val2 = hf2.apply(new Desk());
        System.out.println("val2-" + val2);//这里输出结果就是val2-北京牌
    }
}

//定义一个函数式接口: 有且只有一个抽象方法的接口
//我们可以使用@FunctionalInterface 来标识一个函数式接口
//MyFunction是一个函数式接口 (是自定义泛型接口)

@FunctionalInterface
interface MyFunction<T, R> {
    R apply(T t); //抽象方法: 表示根据类型T的参数,获取类型R的结果

    //public void hi();

    //函数式接口,依然可以有多个默认实现方法
    default public void ok() {
        System.out.println("ok");
    }
}
@FunctionalInterface
interface MyInterface {
    public void hi();
}

class Desk { //Bean
    private String name = "my desk";
    private String brand = "北京牌";
    private Integer id = 10;

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }
    public String getBrand() {
        return brand;
    }

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值