「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」
前言
哈喽大家好,我是卡诺,一名致力于成为全栈的全粘工程师!
今天要和大家一起学习Lambda表达式,Lambda表达式是Java8开始出现的新特性,相信现在应该有很多小伙伴用着Java8+版本,写的却是Java7的代码(没错,就是我了)!接下来我们就一起开启Lambda的学习吧!
你要懂的几个概念
-
什么是接口默认方法?
- 使用default关键字在接口中添加方法实现,如下代码:
public interface IDefaultMethod {
default void printDefault() {
System.out.println("Hello default method");
}
}
// test
void testDefaultMethod() {
IDefaultMethod iDefaultMethod = new IDefaultMethod() {};
iDefaultMethod.printDefault();
}
-
什么是函数式接口?
- 有且仅有一个抽象方法声明的接口(但接口可以有多个默认方法),当然为了让编译器能够识别,更建议你在接口上增加 @FunctionalInterface用以标记(非必须使用,但是强烈建议标注),此时添加编译器则会给出报错提示,函数式接口如下:
@FunctionalInterface
public interface IFunctionalMethod {
void helloWord();
default void printDefault() {
System.out.println("Hello default method");
}
default void printDefaultJava() {
System.out.println("Hello default java");
}
}
// test
public void test(){
IFunctionalMethod iFunctionalMethod = new IFunctionalMethod() {
@Override
public void helloWord() {
System.out.println("impl hello word");
}
};
iFunctionalMethod.helloWord();
iFunctionalMethod.printDefault();
iFunctionalMethod.printDefaultJava();
}
- 什么是Lambda表达式?
- 是一个匿名函数,可以当作参数传递;
- 需要注意的是,lambda并不是任何地方都可以使用,需要特定的函数式接口进行匹配。
- 如果你正在使用idea进行开发,你会发现在IFunctionalMethod的测试代码部分我们声明的函数,idea会建议我们Replace with lambda, 如下图:
- 调整后的lambda代码如下:
public void testLambda(){
IFunctionalMethod iFunctionalMethod = () -> System.out.println("impl hello word");
iFunctionalMethod.helloWord();
iFunctionalMethod.printDefault();
iFunctionalMethod.printDefaultJava();
}
通过上面几个基础概念和简单的例子演示,我们可以看出Lambda让代码更加简洁、紧凑(如果你们公司是按照代码行数算绩效,建议不要使用Lambda,因为它实在是太简洁了),接下来我们趁着打铁,赶快看看Lambda更多的骚操作!
Lambda表达式语法结构
任何一种语法都有它的使用规则,Lambda当然也不例外,我们来看看Lambda的语法结构:
(参数列表) -> {方法体}
参数列表对应的是抽象方法的参数,箭头“->” 是固定位置的固定写法将参数和方法体,->方法体即Lambda主体对应的是抽象方法的实现。
- 案例
public interface LambdaExample {
String helloLambda(String param);
}
// test
LambdaExample lambdaExample = (String param) -> {
System.out.println("第一个lambda语法展示");
return param;
};
Lambda语法其他场景实践
通常我们在实际使用Lambda的时候会基于语法结构进行一系列的简化操作(总而言之,能少写点就少写点)
以下案例基于案例LambdaExample
- 参数类型可以省略
LambdaExample lambdaExample = (param) -> {
System.out.println("第二个lambda语法展示");
return param;
};
- 抽象方法参数只有一个,可以去掉参数的括号,如果是多个参数不允许哦!
LambdaExample lambdaExample = param -> {
System.out.println("第三个lambda语法展示");
return param;
};
- 如果方法体只有一行代码如下
LambdaExample lambdaExample = param -> {
return param;
};
// 可以将方法体的{}也省略,如果有返回值,那么return也可以省略
// 上述代码最终优化为
LambdaExample lambdaExample = param -> param;
源码
总结
- 本章主要针对Lambda的概念、语法、基本用法进行一些简要的描述,并提供一些示例代码;
- Lambda在某些场景允许简化,本章仅对Lambda的语法结构进行简化,后续章节我们会讲述其他简化方案。
关联文章
最后
- 感谢铁子们耐心看到最后,如果大家感觉本文有所帮助,麻烦给个赞👍或关注➕;
- 由于本人技术有限,文章和代码可能存在错误,希望大家评论指出,万分感激🙏;
- 同时也欢迎大家V我一起讨论学习web前端、Java等IT知识,一起卷一起进步。