拿下困惑自己许久的Lambda表达式!

前言

  今天讲一下这个困惑我很久的Lambda。为什么这么说呢?因为我之前一直没主动去学过Lambda。很多使用Lambda表达式的代码我都没有仔细去琢磨咋回事。但是最近这个Lambda表达式出现的有些频繁,有点影响我接下来的学习了,于是我就去学了一下。我也是刚学完就来总结了,也算是巩固一下。当然我也希望这篇文章能帮到更多准备学Lambda同学。
  这篇文章我会用很多通俗易懂的例子来教大家如何使用Lambda,建议大家自己也敲一遍案例,这样印象才会更加深刻!!
ps:本文中使用的所有例子为 一个接口,下面对应的Lambda实现 以及精简后的Lambda实现

Lambda表达式

使用须知

  Lambda表达式虽然可以对接口进行简单的实现,但是这些接口必须只有一个抽象方法!!。这里有个注解我给大家说明一下:@FunctionalInterface这个注解是用在接口上面(修饰函数式接口),一旦使用了这个注解,那么这个接口中只能有一个抽象的方法。

基础语法和语法精简

():用来描述参数列表
 {}:用来描述方法体 有时可以省略
 ->: Lambda运算符 读作 goes to
  • 无参无返回类型接口的实现(方法大括号精简)
/**
*函数式接口
*/
@FunctionalInterface//修饰函数式接口(接口中的抽象方法只能有一个)
public interface NoneReturnNoneParmeter {
    void test();
}
--------------------------------------------------------------
//使用Lambda表达式实现接口:
NoneReturnNoneParmeter lambda1=()->{
            System.out.println("hello word");
        };
--------------------------------------------------------------
//精简Lambda表达式:
/**
* 方法大括号精简:
* 如果方法体中只有一条语句,此时大括号可以省略
*/
NoneReturnNoneParmeter lambda1=()->System.out.println("hello word");

  • 有返回值、一个参数的接口(小括号的精简、大括号精简的补充)
/**
*函数式接口
*/
@FunctionalInterface
public interface SingleReturnSingleParmeter{
    int test(int a);
}
--------------------------------------------------------------
//使用Lambda表达式实现接口:

SingleReturnSingleParmeter lambda3=(int a)->{
            return a*2;
        };
--------------------------------------------------------------
//精简Lambda表达式:
/**
* 参数小括号
* 如果参数列表中,参数的数量只有一个 此时小括号可以省略
*/
SingleReturnSingleParmeter lambda3=a->{
				return a*2;
			}
--------------------------------------------------------------

/**
* 大括号精简补充:
* 如果方法体中唯一的一条语句是一个返回语句
* 则省略大括号的同时 也必须省略return
*/
SingleReturnSingleParmeter lambda3 a->a*2;

  • 无返回值、多个参数的接口
/**
*函数式接口
*/
@FunctionalInterface
public interface NoneReturnMutipleParmeter {
    void test(int a,int b);
}
--------------------------------------------------------------
//使用Lambda表达式实现接口:

NoneReturnMutipleParmeter lambda2=(int a,int b)->{
            System.out.println("hello word");
        };
--------------------------------------------------------------
//精简Lambda表达式:
/**
* 参数类型
* 由于在接口的抽象方法中,已经定义了参数的数量类型
* 所以在Lambda表达式中参数的类型可以省略
* 备注:如果需要省略类型,则每一个参数的类型都要省略
* 千万不要一个省略一个不省略
*/
NoneReturnMutipleParmeter lambda2=(a,b)->
				System.out.println("hello word");

进阶(引用方法)


/**
*函数式接口
*/
@FunctionalInterface
public interface SingleReturnSingleParmeter{
    int test(int a);
}
/**
*方法引用:
* 注意:
*  1.引用的方法中,参数数量和类型一定要和接口中定义的方法一致
*  2.返回值的类型也一定要和接口中的方法一致
*/
public class Syntax {
 /**
 * 自定义的实现方法
 */
 private static int change(int a){
 	return a*2; 
  }
  /**
  *普通的引用
  */
 SingleReturnSingleParmeter lambda1=a->a*2;
 
//简化:可以快速的将一个Lambda表达式的实现指向一个已经实现的方法
SingleReturnSingleParmeter lambda4=a->change(a);

/**
* 方法的隶属者 如果是静态方法 隶属的就是一个类 其他的话就是隶属对象
* 语法:方法的隶属者::方法名
*/
SingleReturnSingleParmeter lambda5=Syntax3::change;
}

总结

  以上是Lambda表达式的一些简单的用法,如果有什么不懂的,或者是想了解更多的进阶用法,我推荐大家看B站Lambda教学视频

  • 13
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blog_xsong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值