Java 8 Lambda 表达式详解

Lambda 表达式是 Java 8 引入的一个重要特性,它提供了一种更简洁的方式来表示匿名函数。基本语法如下:

(parameters) -> { statements }

1.1 基本示例

// 1. 无参数的 Lambda 表达式
Runnable runnable = () -> System.out.println("Hello Lambda!");
// 2. 单个参数的 Lambda 表达式(可以省略参数括号)
Consumer<String> consumer = name -> System.out.println("Hello, " + name);
// 3. 多个参数的 Lambda 表达式
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;

2. 函数式接口

Lambda 表达式需要与函数式接口配合使用。函数式接口是只包含一个抽象方法的接口。

2.1 常用函数式接口

// Predicate:接收一个参数,返回 boolean
Predicate<Integer> isPositive = num -> num > 0;
// Function:接收一个参数,返回一个结果
Function<String, Integer> stringToLength = str -> str.length();
// Consumer:接收一个参数,无返回值
Consumer<String> printer = message -> System.out.println(message);
// Supplier:无参数,返回一个结果
Supplier<Double> randomNumber = () -> Math.random();

3. Lambda 表达式进阶用法

3.1 方法引用

方法引用是 Lambda 表达式的一种简化写法:

// 静态方法引用
Function<String, Integer> parser = Integer::parseInt;
// 实例方法引用
String str = "Hello";
Supplier<Integer> lengthSupplier = str::length;
// 构造方法引用
Supplier<ArrayList<String>> listCreator = ArrayList::new;

3.2 复杂示例

public class LambdaExample {
	public static void main(String[] args) {
		List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
		// 使用 Lambda 进行排序
		names.sort((s1, s2) -> s1.compareToIgnoreCase(s2));
		// 使用 Lambda 进行过滤和映射
		names.stream()
			.filter(name -> name.length() > 4)
			.map(String::toUpperCase)
			.forEach(System.out::println);
	}
}

4. Lambda 表达式最佳实践

  1. 保持简洁:Lambda 表达式应该简短且清晰
  2. 使用类型推断:让编译器推断参数类型
  3. 优先使用方法引用:当 Lambda 表达式仅调用一个已存在的方法时
  4. 合理使用函数式接口:选择合适的函数式接口

4.1 实际应用示例

public class LambdaPractice {
	public static void main(String[] args) {
		List<Person> people = Arrays.asList(
			new Person("Alice", 25),
			new Person("Bob", 30),
			new Person("Charlie", 35)
		);
		// 使用 Lambda 进行复杂操作
		people.stream()
			.filter(p -> p.getAge() > 28)
			.sorted(Comparator.comparing(Person::getName))
			.map(Person::getName)
			.forEach(System.out::println);
	}
}

class Person {
	private String name;
	private int age;
	public Person(String name, int age) {
	this.name = name;
	this.age = age;
	}
	public String getName() { return name; }
	public int getAge() { return age; }
}

5. 总结

Lambda 表达式的优点:

  • 代码更加简洁
  • 提高代码可读性
  • 支持函数式编程
  • 方便并行处理

注意事项:

  • Lambda 表达式中的变量作用域
  • 避免过度使用,保持代码可读性
  • 注意性能影响
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冰糖心书房

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

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

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

打赏作者

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

抵扣说明:

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

余额充值