Lambda表达式是Java 8中新增的一个特性,它的引入极大地丰富了Java语言的表达能力,同时也让代码变得更加简洁、易读。Lambda表达式本质上是一个匿名函数,它可以用于形成一个代码块,这个代码块可以被当作一个参数传递给其他方法,或者被赋值给一个变量。
Lambda表达式的基本形式是这样的:(parameters) -> expression 或 (parameters) -> { statements; }。其中,parameters是输入参数,可以是零个、一个或多个;expression是一个表达式,它的值将作为Lambda表达式的结果返回;statements则是一段代码块,可以包含多条语句,并且可以包含return语句。
例如,我们可以用Lambda表达式来创建一个Runnable对象:
Runnable r = () -> System.out.println("Hello, Lambda!");
r.run(); // 输出:Hello, Lambda!
在这个例子中,Lambda表达式() -> System.out.println("Hello, Lambda!")没有输入参数,只有一个表达式System.out.println("Hello, Lambda!"),这个表达式就是Lambda表达式的主体。
Lambda表达式的一个重要应用是在集合类的操作中。例如,我们可以使用Lambda表达式来过滤一个List中的元素:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> shortNames = names.stream().filter(name -> name.length() < 6).collect(Collectors.toList());
// shortNames: ["Alice", "Bob"]
在这个例子中,Lambda表达式name -> name.length() < 6被用作了filter方法的参数,它表示了一个条件:名字的长度小于6。
Lambda表达式还可以用在更复杂的场景中,例如,我们可以使用Lambda表达式来实现一个自定义的排序规则:
List<Person> people = Arrays.asList(new Person("Alice", 30), new Person("Bob", 20), new Person("Charlie", 40));
people.sort((p1, p2) -> p1.getAge() - p2.getAge());
// 按照年龄从小到大排序
在这个例子中,Lambda表达式(p1, p2) -> p1.getAge() - p2.getAge()定义了一个比较器,它根据人的年龄来进行比较。
总的来说,Lambda表达式是一个非常强大的工具,它可以让代码变得更加简洁、易读,同时也让函数式编程成为可能。在Java的日常编程中,我们应该尽可能地利用这一特性,以提高我们的开发效率。