Supplier là một Functional Interface, do đó nó chỉ chứa một phương thức abstract như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
package java.util.function; /** * Represents a supplier of results. * * <p>There is no requirement that a new or distinct result be returned each * time the supplier is invoked. * * <p>This is a <a href="package-summary.html">functional interface</a> * whose functional method is {@link #get()}. * * @param <T> the type of results supplied by this supplier * * @since 1.8 */ @FunctionalInterface public interface Supplier<T> { /** * Gets a result. * * @return a result */ T get(); } |
Interface này đơn giản chỉ là trả về giá trị trong context mà nó đang được sử dụng bằng phương thức get().
Ví dụ như mình có danh sách sau:
1 |
List<String> s = Arrays.asList("Khanh", "Quan"); |
Giờ mình muốn sử dụng interface Supplier để lấy ra giá trị của từng phần tử trong danh sách trên và in ra console, mình sẽ viết một phương thức như sau:
1 2 3 |
private void print(Supplier supplier) { System.out.println(supplier.get()); } |
Và giờ chúng ta có thể sử dụng phương thức này rồi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package com.huongdanjava.javaexample; import java.util.Arrays; import java.util.List; import java.util.function.Supplier; public class Example { public static void main(String[] args) { List<String> s = Arrays.asList("Khanh", "Quan"); s.stream().forEach(x -> print(() -> x)); } private static void print(Supplier supplier) { System.out.println(supplier.get()); } } |
Trong đoạn code trên, thay vì mình sử dụng interface Consumer, mình đã sử dụng phương thức print() với tham số là một interface Supplier, giá trị là giá trị của từng phần tử trong danh sách.
Kết quả:
Giống như interface Consumer, ở đây chúng ta cũng có vài biến thể của interface Supplier, đó là:
- Interface IntSupplier: với phương thức getAsInt() trả về giá trị Integer.
- Interface DoubleSupplier: với phương thức getAsDouble() trả về giá trị Double.
- Interface LongSupplier: với phương thức getAsLong() trả về giá trị Long.
- Interface BooleanSupplier: với phương thức getAsBoolean() trả về giá trị Boolean.