🧵 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
🍒 Магия двойного двоеточия: Method References
Мы уже научились писать лямбды. Но иногда даже лямбда кажется слишком громоздкой. Если ваша лямбда не делает ничего, кроме вызова одного уже существующего метода, Java позволяет использовать Method Reference (ссылку на метод).
Синтаксис простой:
🛠 4 ситуации, когда это работает
Есть 4 основных способа использовать оператор
1. Ссылка на статический метод
💙 Лямбда:
💙 Reference:
💙 Суть: Просто перенаправляем входящий параметр в статический метод.
2. Ссылка на метод конкретного объекта
💙 Лямбда:
💙 Reference:
💙 Суть: У нас уже есть готовый объект (System.out), и мы вызываем его метод для каждого элемента.
3. Ссылка на метод произвольного объекта определенного типа (Самый хитрый пункт! 🤯)
💙 Лямбда:
💙 Reference:
💙 Суть: Здесь метод вызывается у самого объекта, который пришел в лямбду. Хотя синтаксис похож на статический вызов, это вызов инстанс-метода.
4. Ссылка на конструктор
💙 Лямбда:
💙 Reference:
💙 Суть: Используется для создания новых объектов (часто в Stream API:
💻 Пример: Было vs Стало
Смотрите, как очищается код. Допустим, у нас есть список имен:
🧠 Как понять, когда использовать?
Если ваша лямбда выглядит так:
или
...смело меняйте её на
Но! Если вам нужно изменить аргумент перед передачей (например,
#Java #CleanCode #MethodReference
📲 Мы в MAX
👉@BookJava
Мы уже научились писать лямбды. Но иногда даже лямбда кажется слишком громоздкой. Если ваша лямбда не делает ничего, кроме вызова одного уже существующего метода, Java позволяет использовать Method Reference (ссылку на метод).
Синтаксис простой:
Класс::метод (без скобок!).🛠 4 ситуации, когда это работает
Есть 4 основных способа использовать оператор
::. Важно понимать разницу, чтобы не путаться.1. Ссылка на статический метод
s -> Integer.parseInt(s)Integer::parseInt2. Ссылка на метод конкретного объекта
obj -> System.out.println(obj)System.out::println3. Ссылка на метод произвольного объекта определенного типа (Самый хитрый пункт! 🤯)
s -> s.toLowerCase()String::toLowerCase4. Ссылка на конструктор
() -> new ArrayList<>()ArrayList::newCollectors.toCollection(ArrayList::new)).💻 Пример: Было vs Стало
Смотрите, как очищается код. Допустим, у нас есть список имен:
List<String> names = Arrays.asList("Alex", "Bob", "Anna");
// ❌ Уровень 1: Анонимный класс (Олдскул)
names.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
// ⚠️ Уровень 2: Обычная лямбда
names.forEach(s -> System.out.println(s));
// ✅ Уровень 3: Method Reference (Красота)
names.forEach(System.out::println);
🧠 Как понять, когда использовать?
Если ваша лямбда выглядит так:
x -> Class.method(x)или
x -> x.method()...смело меняйте её на
::.Но! Если вам нужно изменить аргумент перед передачей (например,
x -> System.out.println("Name: " + x)), то Method Reference уже не подойдет, оставайтесь на лямбде.#Java #CleanCode #MethodReference
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2