Совет Spring Framework💡
Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в
📲 Мы в MAX
👉@BookJava
Вы можете инжектировать (autowire) бины, которые могут отсутствовать, обернув их в
java.util.Optional. Таким образом вы сообщаете, что этот бин является необязательным, избегаете исключения, если он не существует, и можете аккуратно обработать его отсутствие с помощью Optional API.👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
🗓 25 декабря в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework».
Интеграционные тесты в Spring: тестовый контекст, репозитории (JDBC/JPA), сервисы и транзакции.
На вебинаре:
Кому будет полезно:
Backend-разработчикам на Java, начинающим осваивать тестирование Spring-приложений.
Что вы получите:
Разберётесь в базе интеграционного тестирования со Spring-контекстом и сможете написать простые тесты для репозиториев и сервисов.
🔗 Ссылка на регистрацию: https://vk.cc/cSrDoD
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🧵 String.join(): Склеиваем строки без боли
Помните те времена, когда для объединения списка строк через запятую приходилось писать циклы, использовать
Начиная с Java 8, у нас есть элегантный статический метод
🛠 Как это работает?
Метод принимает разделитель (delimiter) и элементы, которые нужно склеить. Элементами могут быть как просто перечисление строк (varargs), так и любая коллекция (Iterable).
1️⃣ Пример с перечислением строк:
2️⃣ Пример с коллекцией (List, Set):
🧐 Важные нюансы:
- Null-safe (частично): Если сам список или массив равен
- Под капотом: Метод использует
🚀 Когда использовать?
Используйте
Если же вы работаете со Stream API, то лучше подойдет коллектор:
#Java #Core #Tips #CleanCode
📲 Мы в MAX
👉@BookJava
Помните те времена, когда для объединения списка строк через запятую приходилось писать циклы, использовать
StringBuilder, а потом еще и аккуратно удалять последний разделитель? 🤯Начиная с Java 8, у нас есть элегантный статический метод
String.join, который делает код чистым и читаемым.🛠 Как это работает?
Метод принимает разделитель (delimiter) и элементы, которые нужно склеить. Элементами могут быть как просто перечисление строк (varargs), так и любая коллекция (Iterable).
1️⃣ Пример с перечислением строк:
String result = String.join(" -> ", "Wake up", "Code", "Sleep");
System.out.println(result);
// Вывод: Wake up -> Code -> Sleep
2️⃣ Пример с коллекцией (List, Set):
List<String> langs = Arrays.asList("Java", "Kotlin", "Groovy");
// Больше никаких циклов!
String output = String.join(" | ", langs);
System.out.println(output);
// Вывод: Java | Kotlin | Groovy
🧐 Важные нюансы:
- Null-safe (частично): Если сам список или массив равен
null, вы получите NullPointerException. Но если null является одним из элементов списка, метод просто преобразует его в строку "null".- Под капотом: Метод использует
StringJoiner (еще один класс из Java 8), что обеспечивает неплохую производительность по сравнению с обычной конкатенацией через +.🚀 Когда использовать?
Используйте
String.join, когда у вас уже есть коллекция или массив строк, и вам нужно быстро собрать их в одну строку.Если же вы работаете со Stream API, то лучше подойдет коллектор:
.collect(Collectors.joining(", "))#Java #Core #Tips #CleanCode
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Использование метода String.join
Метод String.join можно использовать для объединения строк с заданным разделителем.
📲 Мы в MAX
👉@BookJava
Метод String.join можно использовать для объединения строк с заданным разделителем.
List<String> items = Arrays.asList("Apple", "Banana", "Cherry");
String result = String.join(", ", items);
System.out.println(result); // Output: Apple, Banana, Cherry
📲 Мы в MAX
👉@BookJava
👍2
☕ Функциональные интерфейсы: Магия за кулисами Лямбд
Если вы используете лямбды (а вы наверняка их используете), значит, вы работаете с функциональными интерфейсами. Давайте разберем, что это такое, зачем нужна аннотация и какие интерфейсы вы обязаны знать наизусть.
🎯 Что это такое?
Функциональный интерфейс - это интерфейс, который содержит ровно один абстрактный метод.
Именно это ограничение позволяет компилятору превращать лямбда-выражение в экземпляр этого интерфейса.
💙 Примечание: В интерфейсе может быть сколько угодно
📝 Аннотация
Ставить её над интерфейсом не обязательно, но хорошим тоном считается ставить.
Зачем? Она работает как защита от дурака: если вы или ваш коллега случайно добавите второй абстрактный метод в интерфейс, компилятор сразу выдаст ошибку, не дожидаясь падения кода в местах использования лямбд.
🧰 Шпаргалка: "Великолепная четверка"
В пакете
1. Predicate
💙 Что делает: Проверяет условие.
💙 Метод:
💙 Где нужен: Фильтрация стримов (`filter`), проверки.
2. Consumer
💙 Что делает: "Потребляет" объект, ничего не возвращая.
💙 Метод:
💙 Где нужен: Вывод на экран, запись в БД,
3. Supplier
💙 Что делает: "Поставляет" объект (из ниоткуда), ничего не принимая.
💙 Метод:
💙 Где нужен: Ленивая инициализация, генерация значений,
4. Function
💙 Что делает: Превращает объект типа T в объект типа R.
💙 Метод:
💙 Где нужен: Преобразование данных,
💻 Пример в коде
🔥 Итог
Функциональные интерфейсы - это контракт для лямбда-выражений. Используйте стандартные из
#Java #Core #Lambda #FunctionalProgramming
📲 Мы в MAX
👉@BookJava
Если вы используете лямбды (а вы наверняка их используете), значит, вы работаете с функциональными интерфейсами. Давайте разберем, что это такое, зачем нужна аннотация и какие интерфейсы вы обязаны знать наизусть.
🎯 Что это такое?
Функциональный интерфейс - это интерфейс, который содержит ровно один абстрактный метод.
Именно это ограничение позволяет компилятору превращать лямбда-выражение в экземпляр этого интерфейса.
default или static методов. Главное - только один абстрактный.📝 Аннотация
@FunctionalInterfaceСтавить её над интерфейсом не обязательно, но хорошим тоном считается ставить.
Зачем? Она работает как защита от дурака: если вы или ваш коллега случайно добавите второй абстрактный метод в интерфейс, компилятор сразу выдаст ошибку, не дожидаясь падения кода в местах использования лямбд.
🧰 Шпаргалка: "Великолепная четверка"
В пакете
java.util.function уже есть готовые интерфейсы на 99% случаев жизни. Не пишите свои велосипеды, пока не выучите эти:1. Predicate
<T>boolean test(T t)2. Consumer
<T>void accept(T t)forEach.3. Supplier
<T>T get()orElseGet.4. Function
<T, R>R apply(T t)map в стримах.💻 Пример в коде
@FunctionalInterface
interface Converter {
int stringToInt(String s);
}
public class Main {
public static void main(String[] args) {
// 1. Создаем реализацию через лямбду
Converter converter = str -> Integer.parseInt(str);
// 2. Использование стандартного Consumer
java.util.function.Consumer<Integer> print = x -> System.out.println("Result: " + x);
int result = converter.stringToInt("123");
print.accept(result); // Вывод: Result: 123
}
}
🔥 Итог
Функциональные интерфейсы - это контракт для лямбда-выражений. Используйте стандартные из
java.util.function, чтобы ваш код был понятен другим разработчикам без лишних документаций.#Java #Core #Lambda #FunctionalProgramming
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1