入门Lambda表达式:提高Java编程效率的利器

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿我们奔赴在各自的热爱里…

语法入门

在这里插入图片描述

Java8引入了lambda表达式,是一种匿名函数,允许在方法中传递代码块,类似于匿名内部类,但lambda表达式更为简洁和可读。Java8中使用lambda表达式可以将函数式编程风格引入Java程序中,简化代码,提高代码的可读性和可维护性。

一个简单的lambda表达式由三部分组成:

  1. 参数列表:参数列表是放在一对圆括号中的,如果有多个参数,用逗号隔开。例如:(int x, int y)

  2. 箭头符号:箭头符号是一个横杠后跟大于号(->),用于将参数列表与lambda表达式主体分开。例如:->

  3. 主体:主体是放在一对花括号中的代码块,它执行lambda表达式的操作,并返回结果。例如:(x, y) -> x + y

lambda表达式的语法如下:

(parameters) -> expression
或者
(parameters) -> { statements; }

其中,parameters是传递给lambda表达式的参数列表,可以是空参数或非空参数。如果有多个参数,则用逗号分隔。expression是一个表达式,代表lambda表达式执行的操作。如果主体是多条语句,则必须用花括号({})将它们括起来,并且用分号(;)分隔每一条语句。

以下是一个简单的lambda表达式实例:

public class LambdaDemo {
   public static void main(String[] args) {
      // lambda表达式实现Runnable接口
      Runnable r = () -> System.out.println("Hello, World!");
      // 启动线程
      new Thread(r).start();
   }
}

输出

Hello, World!

这个例子中,我们使用lambda表达式实现了Runnable接口,将代码块传递给Thread构造函数,从而创建一个新的线程并启动。


案例学习

以下是一个简单的lambda表达式示例,用于对一个列表进行排序:

List<Integer> list = Arrays.asList(5, 3, 1, 4, 2);
// 进行升序排序
Collections.sort(list, (a, b) -> a.compareTo(b));
// 输出排序结果
System.out.println(list);

输出结果为

[1, 2, 3, 4, 5]

在这个例子中,我们使用lambda表达式作为参数传递给Collections.sort()方法,对列表进行升序排序。lambda表达式中使用了compareTo()方法来比较两个元素的大小,这是因为List的元素类型是Integer,而Integer类实现了Comparable接口。在这个例子中,lambda表达式的参数类型是两个Integer类型的元素a和b,箭头后面的主体是一个表达式a.compareTo(b)。由于compareTo()方法返回一个整数值,所以不需要在主体中使用return语句。


除了对列表进行排序,lambda表达式还可以用于处理集合元素,例如在一个列表中查找满足条件的元素:

List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
// 使用lambda表达式查找第一个长度大于3的字符串
String result = list.stream()
                   .filter(str -> str.length() > 3)
                   .findFirst()
                   .orElse(null);
// 输出结果
System.out.println(result);

输出结果为

apple

在这个例子中,我们使用了Java 8新增的Stream API和lambda表达式,对列表中的元素进行过滤和查找操作。首先,list调用了stream()方法,将列表转换成一个流,然后使用filter()方法过滤出长度大于3的字符串,最后使用findFirst()方法查找第一个满足条件的元素,并调用orElse()方法获取查找结果。lambda表达式的参数类型是字符串类型的元素str,主体是一个表达式str.length() > 3,表示判断字符串的长度是否大于3。由于filter()方法返回一个Stream对象,findFirst()方法返回一个Optional对象,所以最后需要使用orElse()方法获取查找结果。


以下是一个具体的案例,使用lambda表达式对一个学生列表进行排序:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class LambdaDemo {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("Tom", 80));
        students.add(new Student("Jerry", 90));
        students.add(new Student("Mike", 75));
        students.add(new Student("Bob", 85));

        // 传统方式,通过实现Comparator接口对学生列表进行按成绩排序
        Collections.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getScore() - o2.getScore();
            }
        });

        for (Student s : students) {
            System.out.println(s.getName() + " " + s.getScore());
        }

        System.out.println("-------------------------");

        // 使用lambda表达式对学生列表进行按成绩排序
        Collections.sort(students, (Student o1, Student o2) -> o1.getScore() - o2.getScore());

        for (Student s : students) {
            System.out.println(s.getName() + " " + s.getScore());
        }
    }
}

class Student {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }
}

上述代码的输出结果为:

Mike 75
Tom 80
Bob 85
Jerry 90
-------------------------
Mike 75
Tom 80
Bob 85
Jerry 90

输出结果中,可以看到,学生列表按成绩从小到大排序,然后输出学生的姓名和成绩。使用传统方式和使用lambda表达式得到的结果是一致的。

这个例子中,我们定义了一个Student类表示学生,包含姓名和成绩两个属性。我们使用Collections.sort()方法对学生列表进行排序。首先,我们传统方式通过实现Comparator接口对学生列表进行按成绩排序。然后,使用lambda表达式对学生列表进行按成绩排序,可以看到,使用lambda表达式可以使代码更简洁,更易读,提高代码的可维护性。

在这里插入图片描述


📖☕️🌊📝📚🎩🚀
📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!

📚愿我们奔赴在各自的热爱里!

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员橙子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值