Постачальник: Генерація Даних
Ось як реалізується функціональний інтерфейс Supplier:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Основне призначення методу get() — повертати об'єкт типу T без прийому жодних параметрів.
Практичне використання Supplier
Supplier часто використовується у випадках, коли необхідно генерувати дані за запитом. Це може бути корисно для лінивої ініціалізації, генерування випадкових значень або отримання значень із зовнішнього джерела.
Створимо систему, яка генерує випадкові паролі. Використовуючи функціональний інтерфейс Supplier, можна легко організувати генерування паролів на вимогу.
Main.java
123456789101112131415161718192021222324package com.example; import java.util.Random; import java.util.function.Supplier; public class Main { public static void main(String[] args) { // Supplier for generating random passwords Supplier<String> passwordSupplier = () -> { String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"; StringBuilder password = new StringBuilder(); Random random = new Random(); for (int i = 0; i < 12; i++) { int index = random.nextInt(characters.length()); password.append(characters.charAt(index)); } return password.toString(); }; // Generate and print the random password String generatedPassword = passwordSupplier.get(); System.out.println("Generated password: " + generatedPassword); } }
Ви створюєте Supplier, який генерує випадковий пароль з 12 символів. Лямбда-вираз всередині Supplier використовує клас Random для вибору випадкових символів із рядка.
Метод get() запускає цю логіку генерації пароля лише за потреби, забезпечуючи ліниве створення значень.
Ліниве створення
Спочатку ви створюєте Supplier, але код всередині нього не виконується одразу. Це є важливою особливістю. Замість негайного виконання певної логіки (наприклад, генерації пароля), ви просто записуєте її всередині Supplier як інструкцію для виконання пізніше, коли це буде потрібно.
Supplier<String> passwordSupplier = () -> {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
StringBuilder password = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 12; i++) {
int index = random.nextInt(characters.length());
password.append(characters.charAt(index));
}
return password.toString();
};
У цьому прикладі код всередині Supplier (генерація пароля) не виконується одразу. Натомість ви визначаєте: «Коли буде запит, ось як буде згенеровано пароль.» Тепер, коли ви викликаєте get() у цього Supplier:
String generatedPassword = passwordSupplier.get();
Тільки тоді виконується код всередині Supplier, і генерується пароль. Це називається ліниве виконання.
Основні обов'язки
1. Яке призначення інтерфейсу Supplier у Java?
2. Що відбудеться, якщо викликати метод get() двічі для одного й того ж об'єкта Supplier?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you give more examples of how Supplier is used in real-world applications?
What is the difference between Supplier and other functional interfaces like Function or Predicate?
Can you explain more about lazy initialization and why it's useful?
Awesome!
Completion rate improved to 2.33
Постачальник: Генерація Даних
Свайпніть щоб показати меню
Ось як реалізується функціональний інтерфейс Supplier:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Основне призначення методу get() — повертати об'єкт типу T без прийому жодних параметрів.
Практичне використання Supplier
Supplier часто використовується у випадках, коли необхідно генерувати дані за запитом. Це може бути корисно для лінивої ініціалізації, генерування випадкових значень або отримання значень із зовнішнього джерела.
Створимо систему, яка генерує випадкові паролі. Використовуючи функціональний інтерфейс Supplier, можна легко організувати генерування паролів на вимогу.
Main.java
123456789101112131415161718192021222324package com.example; import java.util.Random; import java.util.function.Supplier; public class Main { public static void main(String[] args) { // Supplier for generating random passwords Supplier<String> passwordSupplier = () -> { String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"; StringBuilder password = new StringBuilder(); Random random = new Random(); for (int i = 0; i < 12; i++) { int index = random.nextInt(characters.length()); password.append(characters.charAt(index)); } return password.toString(); }; // Generate and print the random password String generatedPassword = passwordSupplier.get(); System.out.println("Generated password: " + generatedPassword); } }
Ви створюєте Supplier, який генерує випадковий пароль з 12 символів. Лямбда-вираз всередині Supplier використовує клас Random для вибору випадкових символів із рядка.
Метод get() запускає цю логіку генерації пароля лише за потреби, забезпечуючи ліниве створення значень.
Ліниве створення
Спочатку ви створюєте Supplier, але код всередині нього не виконується одразу. Це є важливою особливістю. Замість негайного виконання певної логіки (наприклад, генерації пароля), ви просто записуєте її всередині Supplier як інструкцію для виконання пізніше, коли це буде потрібно.
Supplier<String> passwordSupplier = () -> {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
StringBuilder password = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 12; i++) {
int index = random.nextInt(characters.length());
password.append(characters.charAt(index));
}
return password.toString();
};
У цьому прикладі код всередині Supplier (генерація пароля) не виконується одразу. Натомість ви визначаєте: «Коли буде запит, ось як буде згенеровано пароль.» Тепер, коли ви викликаєте get() у цього Supplier:
String generatedPassword = passwordSupplier.get();
Тільки тоді виконується код всередині Supplier, і генерується пароль. Це називається ліниве виконання.
Основні обов'язки
1. Яке призначення інтерфейсу Supplier у Java?
2. Що відбудеться, якщо викликати метод get() двічі для одного й того ж об'єкта Supplier?
Дякуємо за ваш відгук!