menu

VanThuong.Com

Blog học lập trình Java và SEO miễn phí.

Java 8 - Tìm hiểu cách dùng Supplier

Posted by on
Trong các bài viết trước tôi đã giới thiệu đến các bạn đọc giả cách dùng các interface bao gồm: Predicate, ConsumerFunction. Trong bài viết này, tôi sẽ tiếp tục giới thiệu đến các bạn một interface khác nằm trong java.util.function package của Java 8. Hiện tại thì package này có rất nhiều functional interface và tôi sẽ lần lượt đi qua tất cả để giúp các bạn hiểu được cách sử dụng của chúng.
Java 8 - Tìm hiểu cách dùng Supplier<T>
Supplier<T> giúp chúng ta tạo ra và trả về các đối tượng khi gọi phương thức get() hoặc bởi một hành động nào đó đã xảy ra trước đó.
Trong functional interface này, nó chỉ chứa một phương thức duy nhất là get(). Kết quả trả về là một đối tượng được khai báo là kiểu T. Cách sử dụng của nó ngược lại so với Consumer, bởi vì Consumer nhận vào một tham số nhưng không trả về kết quả còn Supplier không nhận vào tham số nhưng trả về kết quả.

Cách dùng Supplier<T>

Đầu tiên chúng ta sẽ xem qua ví dụ bên dưới đây
import java.util.function.Supplier;

/*
* Official blog: w w w . v a n t h u o n g . c o m
*/
public class Main {
  public static void main(String[] args) {
    Supplier<Person> supplier = () -> new Person();
    System.out.println(supplier.get());
  }

}

class Person {
  @Override
  public String toString() {
    return "I am a Person";
  }
}
Trong đoạn code trên, tại thời điểm chúng ta gọi supplier.get() thì đối tượng Person mới được tạo ra và trả về. Nó sẽ in ra màn hình chuỗi `I am a Person`.

Tiếp theo, chúng ta sẽ xem qua một ví dụ khác mà Supplier sẽ trả về đối tượng đã được tạo ra trước đó.
import java.util.function.Supplier;

/*
* Official blog: w w w . v a n t h u o n g . c o m
*/
public class Main {
  public static void main(String[] args) {
    Employee emp = new Employee();

    Employee emp1 = produce(() -> emp);
    Employee emp2 = produce(() -> emp);
    
    emp1.setName("Jack");
    System.out.println(emp1.getName());
    System.out.println(emp2.getName());
  }

  public static Employee produce(Supplier<Employee> supplier) {
    return supplier.get();
  }
}

class Employee {
  private String name;
  
  public Employee() {
    System.out.println("Employee initialized...");
  }
  
  public String getName() {
    return name;
  }
  
  public void setName(String name) {
    this.name = name;
  }
}
Từ đoạn code trên, bạn thấy rằng đối tượng Employee đã được tạo ra trước đó và trả về khi có lời gọi đến phương thức get() của Supplier. Ngoài ra, trong đoạn code này tôi cũng đã minh họa cách sử dụng Supplier như một parameter khi truyền vào phương thức produce(). Biên dịch và chạy đoạn code trên nó sẽ in ra màn hình kết quả
Employe initialized...
Jack
Jack

Như vậy là tôi đã hướng dẫn xong về cách dùng Supplier, vậy chúng ta nên apply nó ở đâu trong code khi lập trình? Trả lời: Nó thường được sử dụng đi kèm với Stream API trong phương thức map() để trả về một đối tượng trong List/Collection.
Đăng bình luận

menu