• Index

Lambda表达式

Last updated: ... / Reads: 48 Edit

Java Lambda表达式是一种简化函数式编程的语法特性,主要用于简化只有一个抽象方法的接口(函数式接口)的实现。以下是Lambda表达式的基本概念:

函数式接口:只有一个抽象方法的接口。Java 8中的@FunctionalInterface注解可以用于显式声明函数式接口。

  • Lambda表达式语法:(parameters) -> expression或(parameters) -> { statements; }。parameters是参数列表,expression或statements是函数体。
  • 类型推断:Java编译器可以根据上下文推断Lambda表达式的参数类型和返回类型。
  • 变量捕获:Lambda表达式可以访问其作用域内的局部变量,但局部变量必须是隐式或显式的final。

Comparator接口

Java中的Comparator接口是一个函数式接口,用于定义对象比较的规则。它主要用于对集合中的元素进行排序或比较。Comparator接口定义了一个compare(T o1, T o2)方法,用于比较两个对象。

下面是一个使用Comparator接口的Java代码示例。在这个示例中,我们创建了一个Person类和一个实现了Comparator接口的AgeComparator类。然后,我们使用Collections.sort()方法对Person对象列表进行排序。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}

class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.getAge(), p2.getAge());
    }
}

public class ComparatorExample {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 30));
        people.add(new Person("Bob", 25));
        people.add(new Person("Charlie", 35));

        Collections.sort(people, new AgeComparator());

        System.out.println("Sorted by age:");
        for (Person person : people) {
            System.out.println(person);
        }
    }
}

运行这段代码,输出结果如下:

Sorted by age:
Person{name='Bob', age=25}
Person{name='Alice', age=30}
Person{name='Charlie', age=35}

这个示例展示了如何使用Comparator接口对Person对象列表按年龄进行排序。

Lambda表达式的语法

Lambda表达式的语法如下:

(parameters) -> expression

或者

(parameters) -> { statements; }
  • 参数:可以是零个、一个或多个参数,用逗号分隔。参数类型可以省略,编译器会自动推断。
  • 箭头符号:用于分隔参数和表达式或语句块。
  • 表达式或语句块:如果是单个表达式,可以直接返回结果;如果是语句块,需要用大括号包围,并在需要返回值的地方使用return语句。

以下是一些Lambda表达式的示例:

// 无参数,返回一个字符串
() -> "Hello, world!"

// 一个参数,返回参数的平方
x -> x * x

// 两个参数,返回它们的和
(x, y) -> x + y

// 两个参数,返回它们的最大值
(x, y) -> {
    if (x > y) {
        return x;
    } else {
        return y;
    }
}

Lambda表达式可以用于简化代码,例如在实现Comparator接口或使用Stream API时。

Lambda表达式简化Comparator接口

下面是一个使用Lambda表达式简化Comparator接口实现的Java代码示例。在这个示例中,我们创建了一个Person类,并使用Lambda表达式创建了一个Comparator对象。然后,我们使用Collections.sort()方法对Person对象列表进行排序。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}

public class LambdaComparatorExample {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 30));
        people.add(new Person("Bob", 25));
        people.add(new Person("Charlie", 35));

        Comparator<Person> ageComparator = (p1, p2) -> Integer.compare(p1.getAge(), p2.getAge());

        Collections.sort(people, ageComparator);

        System.out.println("Sorted by age:");
        for (Person person : people) {
            System.out.println(person);
        }
    }
}

运行这段代码,输出结果如下:

Sorted by age:
Person{name='Bob', age=25}
Person{name='Alice', age=30}
Person{name='Charlie', age=35}

这个示例展示了如何使用Lambda表达式简化Comparator接口实现,并对Person对象列表按年龄进行排序。


Comments

Make a comment

  • Index