java 8 lambda 申明_2019-02-03——Java8 Lambda

一.认识Lambda

Lambda表达式专门针对只有一个方法的接口(即函数式接口)

lambda表达式的基本格式为(x,y...)—>{表达式...};

(1)可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

(2)可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

(3)可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

(4)可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

在我的理解看来更像是实现一个函数式接口; x,y...表示抽象方法的入参数,表达式实际上是抽象的具体实现,

比如:

首先定义了一个函数式接口:

public interface Operation{

int operator(int x,int y);

}

其次定义一个方法,入参为该接口类型

public class Test{

public void t(Operation o){

o.operator(x,y);

}

}

最后调用t方法的方式:

第一种,也是最古老的一种传入一个Operation接口的实现

public void m(){

t(new Operation(){

@Override

public int operator(int x,int y){

return x*x+y*y;

}

});

}

2.第二种,使用lambda表达式

public void m(){

t((x,y)->x+y);

}

3.第三种,也就是方法引用

(1)首先需要一个方法

public class Other{

public static int other(int m,int n){

return m*n;

}

}

(2)其次在t方法中进行方法引用

public void m(){

t(Other::other);

}

最终的效果就是:

public void m(){

t(new Operation() {

@Override

public int operator(int x, int y) {

return x*x+y*y;

}

});

t((x,y)->x+y);

t(Other::other);

}

比较一下Other类的other方法和Operation接口的operator方法可以看出两个方法都是传入两个int型参数返回一个int类型的值。

我觉得Java8的函数式编程打破了以往的束缚,在以往方法定义了一个类型的入参,在调用方法的时候必须传入该类型的实例。但是函数式接口却打破了这一约束,把函数式接口当作形参感觉更像是传入方法的实现而非接口的实现

Lambda表达式并非是方法的实现

对于方法的引用我们可以换个写法

public void m(){

t((x,y)->Other.other(x,y));

}

如果不够清晰可以在定义一个方法

public static String another(int x,int y,int z){

return (x*y*z)+"";

}

对该方法的引用如下

public void m(){

t((x,y)->{

String another = Other.another(x, y, 10);

return Integer.parseInt(another);

});

}

通过这个写法可以看出对方法的引用其实是一种对接口实现的简化。

(1)简化了方法调用

(2)简化了返回值

(3)简化了大括号

最后在比较一下几种调用方式:

public void m(){

t(new Operation() {

@Override

public int operator(int x, int y) {

return x*x+y*y;

}

});

t((x,y)->x+y);

t(Other::other);

t((x,y)->Other.other(x,y));

t((x,y)->{

String another = Other.another(x, y, 10);

return Integer.parseInt(another);

});

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值