Java lambda表达式
·
![![[Pasted image 20241122092740.png]]](https://i-blog.csdnimg.cn/direct/b05a09f1c671449baa44e168e334e5f4.png)
- 用于简化匿名内部类的书写
- 使用条件:只能简化函数式接口的匿名内部类.
- 函数式接口:只有一个抽象方法的接口.
- 函数式接口上面一般都有一个注解:
@FunctionalInterface,有这个注解的接口一定是函数式接口
package Warren;
interface Swim{
void swim();
}
public class Main {
public static void main(String[] args) {
Swim a = new Swim() {
public void swim() {
System.out.println("a swim");
}
};
Swim b=()->{
System.out.println("b swim");
};
//简化后:Swim b=()-> System.out.println("b swim");
b.swim();
}
省略规则:
![![[Pasted image 20241122094227.png]]](https://i-blog.csdnimg.cn/direct/59bff457795d42469e8adb2e5c99f35f.png)
方法引用:
-
进一步简化 Lambda 表达式. 尤其是当 Lambda 表达式仅调用一个方法时.
-
基本语法:
ClassName::methodName
//或者
instance::methodName
1. 静态方法引用
- 概念:直接引用类的静态方法。格式:
ClassName::staticMethodName。
import java.util.Arrays;
import java.util.List;
public class MethodReferenceExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Tom", "Jerry", "Mickey", "Donald");
// 使用 Lambda 表达式
names.forEach(name -> System.out.println(name));
// 使用方法引用
names.forEach(System.out::println); // 静态方法引用
}
}
System.out::println 是 System.out(PrintStream 类型)的 println 方法的引用,直接引用了静态方法。
2. 实例方法引用(特定对象)
- 概念:引用某个对象的实例方法。格式是:
instance::instanceMethodName。
import java.util.Arrays;
import java.util.List;
public class MethodReferenceExample {
public void printName(String name) {
System.out.println(name);
}
public static void main(String[] args) {
List<String> names = Arrays.asList("Tom", "Jerry", "Mickey", "Donald");
MethodReferenceExample obj = new MethodReferenceExample();
// 使用 Lambda 表达式
names.forEach(name -> obj.printName(name));
// 使用方法引用
names.forEach(obj::printName); // 实例方法引用
}
}
3. 实例方法引用(任意对象)
- 概念:引用某个类的任意对象的实例方法。语法格式是:
ClassName::instanceMethodName。
示例:
import java.util.Arrays;
import java.util.List;
public class MethodReferenceExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Tom", "Jerry", "Mickey", "Donald");
// 使用 Lambda 表达式
names.sort((a, b) -> a.compareTo(b));
// 使用方法引用
names.sort(String::compareTo); // 实例方法引用(任意对象)
// 输出排序后的名字
names.forEach(System.out::println);
}
}
String::compareTo 引用了 String 类的实例方法 compareTo。这里 names.sort 会调用每个元素的 compareTo 方法进行排序。
4. 构造方法引用
通过方法引用来调用类的构造方法。格式是:ClassName::new。
import java.util.function.Function;
public class MethodReferenceExample {
public static void main(String[] args) {
// 使用 Lambda 表达式
Function<String, StringBuilder> lambda = s -> new StringBuilder(s);
// 使用构造方法引用
Function<String, StringBuilder> methodRef = StringBuilder::new;
StringBuilder sb1 = lambda.apply("Hello");
StringBuilder sb2 = methodRef.apply("World");
System.out.println(sb1); // 输出 "Hello"
System.out.println(sb2); // 输出 "World"
}
}
更多推荐



所有评论(0)