滚雪球学Java(41):Lambda表达式和方法引用:提高代码可读性和简洁性的神器
🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
前言
Lambda表达式和方法引用是Java 8中的两个比较重要的特性,它们可以帮助我们减少代码量、提高代码可读性和简洁性,从而提高我们的开发效率。在本文中,我们将详细介绍Lambda表达式和方法引用的用法和实现方式,并通过实例来说明它们的优势。
摘要
Lambda表达式是一种匿名函数,它可以作为参数传递给方法或存储在变量中。Lambda表达式的语法比较简洁,但是它们能够处理的任务比较有限。方法引用是Lambda表达式的一种简化写法,用于引用已经存在的方法。方法引用的语法更加简洁,但是需要提前定义好方法。
正文
Lambda表达式的语法
Lambda表达式的语法包括参数列表、箭头符号和函数体。例如:
(parameter1, parameter2) -> {
// 函数体
}
其中,参数列表可以为空,或者包含一个或多个参数。函数体可以是一行代码,或者包含多行代码的代码块。如果函数体只有一行代码,可以省略花括号,例如:
(parameter1, parameter2) -> expression
Lambda表达式可以有返回值,如果函数体只包含一个表达式,则该表达式的值将作为Lambda表达式的返回值。如果函数体包含多条语句,则需要使用return
语句来返回结果,例如:
(parameter1, parameter2) -> {
int result = expression1 + expression2;
return result;
}
Lambda表达式的使用
Lambda表达式通常用于函数式接口中,函数式接口是指只包含一个抽象方法的接口。例如,java.lang.Runnable
接口就是一个函数式接口,它只包含一个无参无返回值的run
方法,我们可以使用Lambda表达式来替代实现该接口:
Runnable r = () -> {
System.out.println("Hello World!");
};
Thread t = new Thread(r);
t.start();
Lambda表达式也可以作为方法参数传递,例如:
public static void process(Runnable r) {
r.run();
}
process(() -> {
System.out.println("Hello World!");
});
方法引用的语法
方法引用是Lambda表达式的一种简化写法,它可以引用已经存在的方法。方法引用的语法包括方法的类名、方法名和方法参数列表。例如:
ClassName::methodName
其中,ClassName
是包含了方法的类名,methodName
是方法名,可以是静态方法或实例方法。方法参数列表需要与方法的参数列表一致。例如,对于以下方法引用:
System.out::println
表示引用System.out
对象的println
方法。
方法引用的使用
方法引用通常用于函数式接口中,可以用来替代Lambda表达式的实现。例如,对于以下Lambda表达式:
Function<String, Integer> f = s -> Integer.parseInt(s);
可以用以下方法引用来替代:
Function<String, Integer> f = Integer::parseInt;
代码示例
以下代码演示了Lambda表达式和方法引用的使用:
package com.demo.javase.day41;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
/**
* @Author bug菌
* @Date 2024-02-20 17:14
*/
public class LambdaExample {
public static void main(String[] args) {
// Lambda表达式
Runnable r = () -> {
System.out.println("Hello World!");
};
Thread t = new Thread(r);
t.start();
process(() -> {
System.out.println("Hello World!");
});
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach((Integer i) -> {
System.out.println(i);
});
// 方法引用
Function<String, Integer> f = Integer::parseInt;
Integer result = f.apply("123");
System.out.println(result);
Consumer<String> c = System.out::println;
c.accept("Hello World!");
}
public static void process(Runnable r) {
r.run();
}
}
根据如上测试代码,实际执行结果如下,仅供参考:
代码解析:
如上代码演示了Lambda表达式和方法引用的用法,这里我给同学们讲解一下。首先,在main方法中定义了一个Runnable对象r,使用Lambda表达式实现了run方法,输出"Hello World!"。然后创建了一个线程对象t,将r作为参数传递给线程对象,并启动线程。接下来,调用了一个自定义的process方法,接收一个Runnable参数,并调用其run方法执行。然后,使用Lambda表达式实现了List的forEach方法,遍历输出List中的每个元素。最后,使用方法引用的方式,定义了一个Function对象f,将Integer的parseInt方法作为方法引用传递给f。然后调用f的apply方法,将字符串"123"转换为整数。
同样地,使用方法引用的方式定义了一个Consumer对象c,将System.out的println方法作为方法引用传递给c。然后调用c的accept方法,输出"Hello World!"。
总的来说,Lambda表达式和方法引用提供了一种简洁、灵活和可读性高的方式来实现函数式编程。
小结
Lambda表达式和方法引用可以帮助我们减少代码量、提高代码可读性和简洁性,从而提高我们的开发效率。Lambda表达式是一种匿名函数,可以作为参数传递给方法或存储在变量中;方法引用是Lambda表达式的一种简化写法,用于引用已经存在的方法。我们可以使用Lambda表达式和方法引用来替代匿名内部类的实现。
附录源码
如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。
☀️建议/推荐你
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。
📣关于我
我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。
- 点赞
- 收藏
- 关注作者
评论(0)