Lambda表达式语法介绍及示例
- Lambda表达式的基本语法
Lambda表达式的基本语法为:(parameters) -> expression或(parameters) -> { statements; }
其中,parameters表示Lambda表达式的参数列表,可以为空或包含一个或多个参数;expression或{ statements; }表示Lambda表达式的主体,可以是一个表达式或一组语句块。
下面是一个简单的Lambda表达式示例:
// Lambda表达式示例
() -> System.out.println("Hello, Lambda!");
- Lambda表达式的参数列表
Lambda表达式的参数列表可以为空或包含一个或多个参数,多个参数之间用逗号分隔。如果参数列表为空,则可以省略参数括号。
下面是一个Lambda表达式的参数列表示例:
// Lambda表达式的参数列表示例
(name, age) -> System.out.println("Name: " + name + ", Age: " + age);
- Lambda表达式的主体
Lambda表达式的主体可以是一个表达式或一组语句块。如果主体是一个表达式,则可以省略大括号和return关键字;如果主体是一组语句块,则必须使用大括号,并且需要使用return关键字返回结果。
下面是一个Lambda表达式的主体示例:
// Lambda表达式的主体示例
// 表达式主体
x -> x * x
// 语句块主体
(x, y) -> {
int sum = x + y;
return sum;
}
- Lambda表达式的类型推断
Lambda表达式的类型可以由编译器根据上下文自动推断出来,也可以显式指定类型。
下面是一个Lambda表达式的类型推断示例:
// Lambda表达式的类型推断示例
// 自动推断类型
(x, y) -> x + y
// 显式指定类型
(String x) -> x.length()
- Lambda表达式的方法引用
Lambda表达式可以使用方法引用来简化代码,方法引用可以引用已有的方法或构造函数。
下面是一个Lambda表达式的方法引用示例:
// Lambda表达式的方法引用示例
// 引用已有的方法
System.out::println
// 引用构造函数
ArrayList::new
以下是Lambda的10个使用案例
- 使用Lambda表达式实现Runnable接口
Runnable r = () -> System.out.println("Hello, World!");
new Thread(r).start();
- 使用Lambda表达式实现Comparator接口
List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, (s1, s2) -> s1.compareTo(s2));
- 使用Lambda表达式实现Function接口
Function<Integer, Integer> square = x -> x * x;
System.out.println(square.apply(5)); // 输出25
- 使用Lambda表达式实现Predicate接口
Predicate<String> startsWithA = s -> s.startsWith("A");
System.out.println(startsWithA.test("Apple")); // 输出true
- 使用Lambda表达式实现Consumer接口
Consumer<String> printUpperCase = s -> System.out.println(s.toUpperCase());
printUpperCase.accept("hello"); // 输出HELLO
- 使用Lambda表达式实现Supplier接口
Supplier<Double> random = () -> Math.random();
System.out.println(random.get()); // 输出一个随机数
- 使用Lambda表达式实现UnaryOperator接口
UnaryOperator<Integer> increment = x -> x + 1;
System.out.println(increment.apply(5)); // 输出6
- 使用Lambda表达式实现BinaryOperator接口
BinaryOperator<Integer> add = (x, y) -> x + y;
System.out.println(add.apply(5, 3)); // 输出8
- 使用Lambda表达式实现Stream的map操作
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> upperCaseList = list.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
System.out.println(upperCaseList); // 输出[APPLE, BANANA, ORANGE]
- 使用Lambda表达式实现Stream的filter操作
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());
System.out.println(filteredList); // 输出[apple]