STACKJAVA

Lambda Expression là gì? Giới thiệu Lambda Expression trong Java 8

Lambda Expression là gì? Giới thiệu Lambda Expression trong Java.

Lambda Expression là feature nổi bật nhất của Java 8, giúp cho cú pháp của Java trở nên đơn giản, rút gọn đi rất nhiều

Ví dụ: Ta có class Person dưới đây:

import java.util.ArrayList;
import java.util.List;

public 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 void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public static List<Person> getListPerson() {
    List<Person> listPerson = new ArrayList<>();
    listPerson.add(new Person("John", 12));
    listPerson.add(new Person("Peter", 15));
    listPerson.add(new Person("John", 17));
    listPerson.add(new Person("Tom", 21));
    return listPerson;
  }

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

So sánh 2 đối tượng Person theo name không sử dụng labda expresion và sử dụng lambda expresion:

// So sánh 2 đối tượng Person theo name, không sử dụng lambda Expression
Comparator<Person> compByName = new Comparator<Person>() {
  @Override
  public int compare(Person o1, Person o2) {
    return o1.getName().compareTo(o2.getName());
  }
};

// So sánh 2 đối tượng Person theo name, không sử dụng lambda Expression

Comparator<Person> compByName = (Person o1, Person o2) -> o1.getName().compareTo(o2.getName());
// hoặc
Comparator<Person> compByName = (o1, o2) -> o1.getName().compareTo(o2.getName());

Tương tự cách viết so sánh 2 đối tượng Person theo name sử dụng lambda expresion ở trên, ta có thể viết so sánh danh sách các Person theo name, nếu cùng name thì sắp xếp theo age giảm dần:

public static void main(String[] args) {
  List<Person> listPersonSortByName = Person.getListPerson();
  
  listPersonSortByName.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));
  System.out.println("sort by name:");
  for (Person person: listPersonSortByName) {
    System.out.println(person);
  }
  
  List<Person> listPersonSortByNameAndAge = Person.getListPerson();
  listPersonSortByNameAndAge.sort((o1, o2) -> {
    if (o1.getName().equals(o2.getName())) {
      return o2.getAge() - o1.getAge();
    }
    return o1.getName().compareTo(o2.getName());
  });
  System.out.println();
  System.out.println("sort by name and age:");
  for (Person person: listPersonSortByNameAndAge) {
    System.out.println(person);
  }
}

Kết quả:

sort by name:
Person [name=John, age=12]
Person [name=John, age=17]
Person [name=Peter, age=15]
Person [name=Tom, age=21]

sort by name and age:
Person [name=John, age=17]
Person [name=John, age=12]
Person [name=Peter, age=15]
Person [name=Tom, age=21]

Rõ ràng cú pháp trở nên đơn giản và ngắn gọn hơn rất nhiều phải không!