В Java 8 Поставщик является функциональным интерфейсом; он не принимает аргументов и возвращает результат.
@FunctionalInterface public interface Supplier{ T get(); }
1. Поставщик
1.1 В этом примере используется Поставщик
для возврата текущей даты и времени.
package com.mkyong; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.function.Supplier; public class Java8Supplier1 { private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); public static void main(String[] args) { Suppliers = () -> LocalDateTime.now(); LocalDateTime time = s.get(); System.out.println(time); Supplier s1 = () -> dtf.format(LocalDateTime.now()); String time2 = s1.get(); System.out.println(time2); } }
Выход
2020-03-02T16:10:49.281223 2020-03-02 16:10:49
2. Возвращает поставщика
package com.mkyong; import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; public class Java8Supplier2{ public static void main(String[] args) { Java8Supplier2 obj = new Java8Supplier2(); List list = obj.supplier().get(); } public Supplier > supplier() { // lambda // return () -> new ArrayList<>(); // constructor reference return ArrayList::new; } }
3. Фабрика
3.1 Простой заводской метод для возврата объекта Разработчик
.
package com.mkyong; import java.math.BigDecimal; import java.time.LocalDate; import java.util.function.Supplier; public class Java8Supplier3 { public static void main(String[] args) { Developer obj = factory(Developer::new); System.out.println(obj); Developer obj2 = factory(() -> new Developer("mkyong")); System.out.println(obj2); } public static Developer factory(Supplier extends Developer> s) { Developer developer = s.get(); if (developer.getName() == null || "".equals(developer.getName())) { developer.setName("default"); } developer.setSalary(BigDecimal.ONE); developer.setStart(LocalDate.of(2017, 8, 8)); return developer; } }
package com.mkyong; import java.math.BigDecimal; import java.time.LocalDate; public class Developer { String name; BigDecimal salary; LocalDate start; // for factory(Developer::new); public Developer() { } // for factory(() -> new Developer("mkyong")); public Developer(String name) { this.name = name; } // get, set, constructor, toString //... }
Выход
Developer{name='default', salary=1, start=2017-08-08} Developer{name='mkyong', salary=1, start=2017-08-08}
Рекомендации
- Поставщик
- Java 8 – Как отформатировать LocalDateTime
- Форматирование даты и времени javadoc
- Java 8 Учебные пособия
Оригинал: “https://mkyong.com/java8/java-8-supplier-examples/”