滚雪球学Java(41):Lambda表达式和方法引用:提高代码可读性和简洁性的神器

简介: 【5月更文挑战第16天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!


@TOC


前言

  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编程,就像滚雪球一样,越滚越大,指数级提升。

目录
相关文章
|
1天前
|
安全 Java
Java 面向对象之旅:封装——让代码更加“接地气”的秘诀。
【6月更文挑战第16天】**Java面向对象的封装秘籍:**将数据和操作打包成类,如`Student`和`Car`,隐藏内部详情,只通过`get/set`方法交互。封装提升代码清晰度,便于管理和保护安全性,就像整理工具箱,让每个功能一目了然,操作自如。
|
1天前
|
安全 Java 数据安全/隐私保护
一探 Java 封装究竟:为何它让代码更加“高大上”?
【6月更文挑战第16天】Java中的封装如城堡般迷人,它确保数据安全(如`UserInfo`类的私有属性),增强代码结构(如`Order`类的操作封装),并提升复用性与扩展性(如`Shape`类的抽象设计)。封装是打造高质量、易维护代码的关键,让代码既安全又高效。
|
1天前
|
存储 缓存 算法
滚雪球学Java(62):HashSet的底层实现原理解析
【6月更文挑战第16天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
7 3
滚雪球学Java(62):HashSet的底层实现原理解析
|
1天前
|
安全 Java
Java 面向对象之旅:在封装的港湾中,找到代码的安宁。
【6月更文挑战第15天】封装是Java面向对象的核心,它保护了类的内部数据,如`Book`和`Student`类中的属性。通过设定私有成员和公共方法,代码更有序,防止直接访问导致的混乱。封装提供了一种控制数据交互的方式,确保安全,如`setGpa()`方法验证输入。这使得代码结构清晰,如同港湾中的船只,井然有序,赋予编程过程美感和安全感。在面向对象的旅程中,封装是我们的庇护所,助力我们构建更美好的程序世界。
|
2天前
|
算法 Java
Java关键字与保留字:如何正确使用,让你的代码“飞”起来!
【6月更文挑战第15天】Java编程中,关键字如&quot;class&quot;、&quot;int&quot;用于特定语法,保留字可能未来成为关键字。理解其含义和用法至关重要,避免用作标识符以防止未来冲突。正确使用如&quot;for&quot;控制循环,优化代码能提升效率,使程序运行更流畅。避免保留字,如&quot;goto&quot;、&quot;const&quot;,查阅文档确保合规性。通过代码优化,让程序效率更高,代码飞行在技术的云端。
|
2天前
|
存储 Java 测试技术
滚雪球学Java(61):从源码角度解读Java Set接口底层实现原理
【6月更文挑战第15天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
11 1
滚雪球学Java(61):从源码角度解读Java Set接口底层实现原理
|
2天前
|
Java 编译器 程序员
【实战攻略】Java高手教你如何灵活运用if-else和switch,提升代码效率!
【6月更文挑战第14天】本文探讨了Java中if-else和switch语句的巧妙运用,通过示例展示了如何提升代码效率和可读性。通过使用Map重构if-else结构,使代码更简洁易维护;利用switch处理枚举类型,实现清晰的代码结构。在性能方面,switch在选项少时占优,而现代JIT编译器优化后的if-else适用于大规模字符串比较。理解并灵活运用这两种控制结构,能助你在Java编程中写出高效、易读的代码。
|
3天前
|
算法 Java 程序员
【程序员必看!】掌握这招if-else,你的Java代码将瞬间高大上!
【6月更文挑战第14天】本文介绍了if-else语句在程序设计中的重要性,通过示例展示其基本语法和复杂用法,如嵌套和else-if链。强调了避免过度嵌套、逻辑运算符的使用、保持一致性及添加注释等提升代码质量的技巧。学习并实践这些技巧,将使你的Java代码更优雅、高效,助你成为编程艺术家。
|
1月前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
261 1
|
Java BI API
在Java代码中打日志需要注意什么?
日志是什么?日志是你在代码运行时打印出来的一些数据和记录,是快速排查问题的好帮手,是撕逼和甩锅的利器!
348 0