2025年6月6日 星期五 乙巳(蛇)年 三月初十 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Java

Java Lambda表达式的用法

时间:10-16来源:作者:点击数:74

Lambda 表达式是一个匿名函数(指的是没有函数名的函数),它基于数学中的λ演算得名,直接对应于其中的 Lambda 抽象。Lambda 表达式可以表示闭包(注意和数学传统意义上的不同)。

Lambda 表达式允许把函数作为一个方法的参数。Lambda 表达式的基本语法如下所示:

(parameters) -> expression

(parameters) ->{ statements; }

Lambda 的使用如下例所示:

  • Arrays.asList( 1, 7, 2 ).fbrEach( i -> System.out.println( i));

以上这种写法中,i 的类型由编译器推测出来的,当然,也可以显式地指定类型,如下例所示:

  • Arrays.asList( 1, 7, 2 ).forEach( (Integer i) -> System.out.println( i));

在 Java 8 以前,Java 语言通过匿名函数的方法来代替 Lambda 表达式。

示例

对于列表的排序,如果列表里面存放的是自定义的类,那么通常需要指定自定义的排序方法,传统的 Java 写法如下所示:

  • import java.util.Arrays;
  • import java.util.Comparator;
  • class Person {
  • public Person(String name, int age) {
  • this.name = name;
  • this.age = age;
  • }
  • private String name;
  • private int age;
  • public int getAge() {
  • return age;
  • }
  • public String getName() {
  • return name;
  • }
  • public String toString() {
  • return name + ":" + age;
  • }
  • }
  • public class Test {
  • public static void main(String[] args) {
  • Person[] people = {new Person("James", 25), new Person("Jack", 21)};
  • //自定义类排序方法,通过年龄进行排序
  • Arrays.sort(people, new Comparator<Person>() {
  • @Override
  • public int compare(Person a, Person b) {
  • return a.getAge() - b.getAge();
  • }
  • });
  • for (Person p : people) {
  • System.out.println(p);
  • }
  • }
  • }

采用 Lambda 表达式后,写法如下所示:

Arrays.sort(people, (Person a, Person b) -> a.getAge()-b.getAge());

Arrays.sort(people, (a, b) -> a.getAge()-b.getAge());

显然,采用 Lambda 表达式后,代码会变得更加简洁。

Lambda表达式是通过函数式接口(只有一个方法的普通接口)来实现的。函数式接口可以被隐式地转换为Lambda表达式。

为了与普通的接口区分开(普通接口中可能会有多个方法),JDK1.8 新增加了一种特殊的注解 @FunctionalInterface。下面给出一个函数式接口的定义:

  • @FunctionalInterface
  • interface fun {
  • void f();
  • }
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门