Java基础——Lambda表达式
·
一、Lambda
1.1 函数式编程
与面向对象不同,后者是先去找到对象,然后让对象去调用成员方法。而在下方的例子中我我们更关心的是排序的规则,不管什么对象去做就都可以,受限于面向对象的语法特点,不得不去创建一个匿名内部类,再通过这类去创建对象,重写里面的抽象方法才能利用这个规则。而函数式编程就可以忽略这个特点。

1.2 Lambda表达式的标准格式
🌟 1.2.1、Lambda 表达式是什么?
Lambda 表达式(Lambda Expression) 是 Java 8 引入的一种简洁写法,用于表示匿名函数(没有名字的函数),主要用来简化函数式接口的实现。
✅ 核心目的:
- 让代码更简洁
- 支持函数式编程风格
- 配合 Stream API 实现高效数据处理
💡 一句话理解:
“Lambda 就是把‘怎么做’直接写成一行代码,而不是写一个完整的类或方法。”


1.2.2 什么是函数式接口?
- 只有一个抽象方法 的接口
- 可以用
@FunctionalInterface注解标记(非必须,但推荐)
❗ Lambda 只能用于“函数式接口”!
1.2.3 代码演示
package com.lkbhua.Algorithm.LambdaDemo;
public class demo2 {
public static void main(String[] args) {
/*
Lambda表达式的注意点:
1、Lambda表达式可以用来简化匿名内部类,其他地方不能用
2、Lambda表达式只能简化函数式接口的匿名内部类的写法
3、函数式接口:
有且只有一个抽象方法的接口叫函数式接口,接口上方可以@functionInterface注解*/
// 1、利用匿名内部类的形式去调用下面的方法
// 调用一个方法的时候,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
// 如果实现类对象只要用到一次,就可以用匿名内部类
// new不是这个接口,而是后面这个没有名字的类的对象
// 这个没有名字的类:是实现了这个Swim接口
// 那么这个整体就可以看作是Swim的实现类对象
method(new Swim() {
@Override
public void swim() {
System.out.println("匿名内部类");
}
});
// 2、利用Lambda表达式进行改写
// 必须是函数式接口(接口,是其他的抽象类都不行)
method(() -> {
System.out.println("Lambda表达式");
});
}
public static void method(Swim s){
s.swim();
}
}
@FunctionalInterface
interface Swim{
public abstract void swim();
//public abstract void show(){
// System.out.println("默认方法");
// }
}

1.3 Lambda表达式的省略写法

package com.lkbhua.Algorithm.LambdaDemo;
import java.util.Arrays;
import java.util.Comparator;
public class demo {
public static void main(String[] args) {
/*
Lambda表达式的省略规则
1、参数类型可以省略不写
2、如果只有一个参数,参数类型可以省略,同时()也可以省略
3、如果Lambda表达式的方法只有一行,大括号、分号、return可以省略不写,需要同时省略*/
Integer[] arr = {1,2,3,4,5,6,7,8,9};
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
// 完整的Lambda表达
Arrays.sort(arr, (Integer o1, Integer o2) -> {
return o1 - o2;
});
// Lambda表达式省略步骤1
// 核心思想:可推导的,即可省略
// 1、参数类型可以省略不写——因为都是相同的参数类型Integer
Arrays.sort(arr, ( o1, o2) -> {
return o1 - o2;
});
// Lambda表达式省略步骤2
// 3、如果Lambda表达式的方法只有一行,大括号、分号、return可以省略不写
Arrays.sort(arr, ( o1, o2) -> o1 - o2);
System.out.println(Arrays.toString(arr));
}
}
1.4 练习

package com.lkbhua.Algorithm.LambdaDemo;
import java.util.Arrays;
import java.util.Comparator;
public class test1 {
public static void main(String[] args) {
/*
定义数组并存储一些字符串,利用Arrays中的sort方法进行排序
需求:
按照字符串的长度进行排序,短的在前面,长的在后面
(暂时不比较字符串里面的内容)*/
String[] arr = {"aaa","aa","aaAa","aaAaa"};
// 如果我们以后要把数组中的数据按照指定的方式进行排列,就需要用到sort方法,而且按照指定的规则
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
// Lambda表达式
Arrays.sort(arr,(String o1,String o2)->{
return o1.length() - o2.length();
});
// Lambda表达式省略
Arrays.sort(arr, ( o1, o2) -> o1.length() - o2.length()
);
// 打印
System.out.println(Arrays.toString(arr));
}
}
“Lambda 不是为了炫技,而是为了让逻辑更清晰。”
它是现代 Java 开发的基础技能,也是通往 Stream API、响应式编程的大门。
声明:
题目详细分析借鉴于通义AI
以上均来源于B站@ITheima的教学内容!!!
本人跟着视频内容学习,整理知识引用
更多推荐
所有评论(0)