Java | Фишки и трюки
الذهاب إلى القناة على Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg
إظهار المزيد6 677
المشتركون
-224 ساعات
-167 أيام
-6630 أيام
أرشيف المشاركات
6 677
⌨️ Base64: стандартные методы кодирования и декодирования
Base64 — это способ представления данных в текстовом формате, который можно безопасно передавать через сеть и использовать в текстовых форматах. В Java для работы с Base64 используется встроенный класс
java.util.Base64.
🔍 Кодирование строки в Base64:
import java.util.Base64;
public class Base64Example {
public static void main(String[] args) {
String original = "Hello, Java!";
String encoded = Base64.getEncoder().encodeToString(original.getBytes());
System.out.println("Encoded: " + encoded); // Вывод: SGVsbG8sIEphdmEh
}
}
🔗 Декодирование строки из Base64:
String encoded = "SGVsbG8sIEphdmEh";
String decoded = new String(Base64.getDecoder().decode(encoded));
System.out.println("Decoded: " + decoded); // Вывод: Hello, Java!
✨ Варианты кодировщиков:
1️⃣ Base64.getEncoder() — стандартный кодировщик.
2️⃣ Base64.getUrlEncoder() — для URL и имён файлов (без символов + и /).
3️⃣ Base64.getMimeEncoder() — для MIME-форматов (разбивает строки на блоки по 76 символов).
💡 Когда использовать?
1️⃣ При передаче данных в текстовом виде (например, JSON или бинарные файлы).
2️⃣ Для работы с авторизацией (например, токены в Basic Auth).
3️⃣ Взаимодействие с API, использующими кодировку Base64.
#Java #Base646 677
Облако — это конструктор!
The Art of Programming — подкаст об инструментах, технике и разработке ПО. По следам конференции HighLoad 2024 записали новый выпуск, в котором обсуждаем индустрию публичных облаков.
Вместе с Данилой Дюгуровым, CTO MTC Web Services, говорим о новостях индустрии, создании новых облачных платформ, потенциале рынка и принципах формирования топовых команд разработки.
🎧Слушайте The Art of Programming на всех популярных подкаст-площадках.
6 677
⌨️ Collectors.teeing(): две операции над одним потоком
С появлением Java 12
Collectors.teeing() стал удобным инструментом для объединения двух независимых операций над потоком. Этот коллектор позволяет выполнять две разные операции над данными и объединять их результат с помощью функции-объединителя.
🔍 Как это работает?
1️⃣ Указываем два коллектора для операций.
2️⃣ Задаём функцию, которая объединит результаты этих операций.
📌 Пример: Найдём сумму и среднее списка чисел.
import java.util.List;
import java.util.stream.Collectors;
public class TeeingExample {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
var result = numbers.stream().collect(
Collectors.teeing(
Collectors.summingInt(Integer::intValue), // Первая операция: сумма
Collectors.averagingInt(Integer::intValue), // Вторая операция: среднее
(sum, avg) -> "Sum: " + sum + ", Average: " + avg // Объединение результатов
)
);
System.out.println(result); // Вывод: Sum: 15, Average: 3.0
}
}
Это позволяет избавиться от многократного прохода по потоку, а код становится компактным и читаемым.
✨ Когда использовать?
1️⃣ Для выполнения нескольких независимых операций над данными потока.
2️⃣ Если нужно объединить результаты этих операций.
💡 Совет:
Collectors.teeing() особенно полезен, когда результаты независимых операций логически связаны. Например, для расчёта статистики или агрегации данных.
#Java #Streams #Collectors #teeing6 677
Каждый ITшник получает от 250к
Оставьте эту чушь для курсов, на которых дают обещания вместо реальных знаний. В 2025 году получить заветный оффер сможет только тот, у кого есть эти 10 мануалов:
– Пошаговая road map по Java
– Redis - 5 улучшений для твоего пет-проекта
– Пошаговая RoadMap по Java
– Мануал по Docker. Основные команды и концепции
– Микросервисы. Вопросы с собеседований
– Шпаргалка с горячими клавишами JetBrains IDE. Ускоришь работу в 10 раз
– Шпаргалка по Kafka
– Инструкция по работе с Git
– Подробный гайд, как найти работу в IT без опыта
– Подборка платформ с вакансиями для java-разработчиков
Ребята из FAANG School собрали бесплатную библиотеку Java Junior с мега полезными материалами, которые помогут освоить сложные темы, упростить и ускорить работу, а также получить приглашение от IT-гигантов.
Свежее пополнение - то, без чего не обойтись ни одному джуну - шпаргалка по основным командам SQL!
Забрать можно по оранжевой кнопке. Доступ открыт всего на сутки - успевай.
6 677
⌨️ Files.walkFileTree(): мощный инструмент для работы с файловой системой
Files.walkFileTree() из пакета java.nio.file позволяет рекурсивно обходить дерево каталогов и выполнять сложные операции. Это гибкий и удобный способ работать с файловой системой, включая чтение, обработку, копирование или удаление файлов.
🔍 Как это работает?
1️⃣ Реализуется интерфейс FileVisitor, который определяет действия для каждой операции.
2️⃣ Можно обрабатывать файлы и директории на каждом этапе обхода.
📌 Пример: удаление дерева каталогов
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class WalkFileTreeExample {
public static void main(String[] args) throws IOException {
Path startPath = Paths.get("example_directory");
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("Deleting file: " + file);
Files.delete(file); // Удаляем файл
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
System.out.println("Deleting directory: " + dir);
Files.delete(dir); // Удаляем директорию после удаления её содержимого
return FileVisitResult.CONTINUE;
}
});
}
}
🔗 Ключевые методы FileVisitor:
visitFile() — вызывается для каждого файла.
postVisitDirectory() — вызывается после обхода содержимого директории.
preVisitDirectory() — вызывается перед входом в директорию.
visitFileFailed() — обрабатывает ошибки доступа.
✨ Когда использовать?
1️⃣ Для удаления, копирования или архивирования файлов/папок.
2️⃣ Для поиска файлов по сложным критериям.
3️⃣ Для выполнения массовых операций с файлами (изменение атрибутов, анализ).
💡 Совет: Используйте SimpleFileVisitor, чтобы переопределять только нужные методы, а не реализовать весь интерфейс FileVisitor.
#Java #Files #FileVisitor6 677
Почему Java - лучший язык для программирования в 2025 году?
Если вы до сих пор выбираете новое направление в IT.. рекомендую посетить канал Павла Сорокина!
Вся выжимка за 5 лет работы Java-разработчиком от ведущего специалиста!
🧑💻Выбирайте уровень подготовки и смотрите возможные решения:
— Начало положено: Только начали изучать язык, у вас все только впереди!
— Улучшение знаний: Высокий доход требует должных знаний - научитесь!
— Хочется зарабатывать: Узнаете, как пройти собеседование на топ-работу с первого раза!
6 677
⌨️ Параллельное программирование и CompletableFuture
Многопоточность позволяет выполнять несколько задач одновременно, что увеличивает производительность приложений и улучшает отзывчивость интерфейса.
Стандартный метод работы с потоками может быть сложным и запутанным.
CompletableFuture — более удобный и мощный инструмент, который упрощает асинхронное программирование.
✍️ Пример: Выполнение задач параллельно с использованием CompletableFuture
import java.util.concurrent.CompletableFuture;
public class AsyncExample {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
CompletableFuture<String> task1 = CompletableFuture.supplyAsync(() -> {
sleep(2000);
return "Результат задачи 1";
});
CompletableFuture<String> task2 = CompletableFuture.supplyAsync(() -> {
sleep(3000);
return "Результат задачи 2";
});
CompletableFuture<String> combined = task1.thenCombine(task2, (result1, result2) -> result1 + " & " + result2);
// Ожидаем завершения всех задач и получаем общий результат
combined.thenAccept(result -> {
long endTime = System.currentTimeMillis();
System.out.println("Общий результат: " + result);
System.out.println("Время выполнения: " + (endTime - startTime) + " мс");
});
combined.join(); // Дождёмся завершения наших задач
}
private static void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
🔧 Что происходит в коде?
1️⃣ Мы запускаем две задачи, каждая из которых выполняется асинхронно.
2️⃣ Используем метод thenCombine, чтобы объединить результаты двух задач.
3️⃣ Когда обе задачи завершены, выводим общий результат и время выполнения.6 677
import java.util.*;
public class Quest {
private static Random rnd = new Random();
public static void main(String[] args) {
StringBuffer word = null;
switch(rnd.nextInt(2)) {
case 1: word = new StringBuffer('P');
case 2: word = new StringBuffer('G');
default: word = new StringBuffer('M');
}
word.append('a');
word.append('i');
word.append('n');
System.out.println(word);
}
}6 677
Что вы мечтали получить в подарок к новому году в детстве? Велик, плюс 3 месяца каникул, десять порций мороженого? Эх, детство-детство...
НО сейчас-то мы взрослые, умные и осознанные люди – точно знаем, что не бывает ничего лучше, чем собственная база знаний.
Принимайте предновогодний подарок – папка "База знаний", в которой собраны ценные каналы, где вы найдете:
▫️Здесь будет много про Пересечение технологий, профессий и реальной жизни.
▫️ Анонсы ивентов из мира IT (митапы, конференции, вебинары, интенсивы, воркшопы).
▫️ Java задачи и тесты
В общем, все не перечислить, поэтому – сохраняйте-> Базу знаний - «Разработка», изучайте, выбирайте максимально ценные для вас каналы или подписывайтесь на все. Знаний много не бывает 😉
Хотите в следующую подборку ?
6 677
⌨️ Как управлять порядком элементов в LinkedHashMap?
LinkedHashMap — это реализация Map, которая сохраняет порядок добавления элементов. Но что, если нужен порядок по использованию (LRU-кэш)? LinkedHashMap справится и с этим!
Порядок добавления (по умолчанию):
java
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkedHashMapExample {
public static void main(String[] args) {
Map<Integer, String> map = new LinkedHashMap<>();
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");
System.out.println(map); // {1=One, 2=Two, 3=Three}
}
}
Порядок использования:
Передайте accessOrder = true в конструктор.
java
import java.util.LinkedHashMap;
import java.util.Map;
public class LRUExample {
public static void main(String[] args) {
Map<Integer, String> map = new LinkedHashMap<>(16, 0.75f, true);
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");
map.get(2); // Используем ключ 2
System.out.println(map); // {1=One, 3=Three, 2=Two}
}
}
Можно переопределить метод removeEldestEntry() для автоматического удаления старых записей.
@Override
protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest) {
return size() > 3; // Удалять записи, если их больше 3
}
#Java #LinkedHashMap #LRU6 677
Эффективная разработка на Spring Boot без ограничений.
Пока зарубежные компании отзывают лицензии у пользователей РФ, Amplicode продолжает помогать максимально удобно работать со Spring Boot, JPA, Docker, Kafka, Liquibase, MapStruct и т.д.
Amplicode можно установить как плагин в IntelliJ IDEA Community и Ultimate, а также в Giga IDE.
Что умеет Amplicode?
⚡ Легкая навигация по проекту
⚡ Создание объектов сразу в терминах фреймворка: контроллеры, репозитории, сервисы, сущности, события, DTO, мапперы и т.д.
⚡ Палитра и инспектор, позволяющие видеть опции, доступные разработчику в текущем контексте
⚡ Умные инжекции, подсказки и исправление ошибок
⚡ и многое другое!
А самое главное, Amplicode доступен бесплатно и без региональных ограничений!
Познакомьтесь со всеми возможностями Amplicode
Читайте наш гайд: «Как превратить IntelliJ IDEA Community Edition в Ultimate за 3 простых шага»
6 677
⌨️ WeakHashMap: когда удаление происходит само собой
WeakHashMap — это коллекция, которая позволяет ключам удаляться из неё автоматически, если на них больше нет сильных ссылок.
Если ключ в WeakHashMap становится недостижимым (нет сильных ссылок), он удаляется сборщиком мусора.
Это делает WeakHashMap полезной для реализации кэшей и других структур, где нужно избегать утечек памяти.
📌 Пример:
java
import java.util.WeakHashMap;
public class WeakHashMapExample {
public static void main(String[] args) {
WeakHashMap<Object, String> map = new WeakHashMap<>();
Object key = new Object();
map.put(key, "Value");
System.out.println("Before GC: " + map); // Ключ и значение есть
key = null; // Убираем сильную ссылку на объект
System.gc(); // Вызываем сборку мусора
System.out.println("After GC: " + map); // Ключ и значение исчезли
}
}
Пока объект-ключ доступен, пара ключ-значение остаётся в WeakHashMap.
Как только ключ становится недоступным, он автоматически удаляется сборщиком мусора.
✨ Когда использовать?
1️⃣ Кэширование: для хранения данных, которые можно восстановить, если они удалены.
2️⃣ Маппинг вспомогательных данных: например, привязка метаданных к объектам, где их удаление важно.
💡 Совет:
Не используйте WeakHashMap для данных, которые критически важны — сборщик мусора может удалить их в любой момент!
#Java #WeakHashMap6 677
Придумать, что дарить близким, — ежегодная задача со звёздочкой. А ведь в детстве можно было просто сделать подарок своими руками. Чуть-чуть картона, чуть-чуть ваты и частичку души.
Яндекс Практикум запустил Студию цифровых поделок, где вы снова сможете делать подарки своими руками, но уже с помощью нейросетей и онлайн-сервисов. Выберите настроение, настройте параметры — и алгоритмы подскажут, что и как можно смастерить.
А ещё на странице студии вас ждут приятные бонусы и скидки от Практикума и других сервисов Яндекса.
🎁 Забрать идеи для близких и подарки для себя
6 677
⌨️ Как работает
IdentityHashMap
IdentityHashMap — это необычная реализация Map, которая использует сравнение по ссылкам (==) вместо стандартного метода equals().
В IdentityHashMap два ключа считаются равными только если это один и тот же объект (сравнение по ссылкам).
📌 Пример:
java
import java.util.IdentityHashMap;
import java.util.Map;
public class IdentityHashMapExample {
public static void main(String[] args) {
Map<String, String> map = new IdentityHashMap<>();
String key1 = new String("key");
String key2 = new String("key");
map.put(key1, "Value 1");
map.put(key2, "Value 2");
System.out.println(map); // Выведет обе пары: {key=Value 1, key=Value 2}
}
}
key1 и key2 — это разные объекты, даже если их строки одинаковы.
✨ Когда использовать?
1️⃣ Кэширование: если нужно различать объекты с одинаковыми данными.
2️⃣ Оптимизация: для низкоуровневой работы с объектами, где важна ссылка, а не значение.
3️⃣ Специфические задачи: при разработке компиляторов, интерпретаторов или для отслеживания уникальных объектов.
💡 Ограничение:
IdentityHashMap не гарантирует порядок элементов и редко используется в стандартных задачах. Это инструмент для узкоспециализированных случаев!
#Java #IdentityHashMap6 677
⌨️ EnumMap — это реализация Map, которая использует в качестве ключей исключительно
Enum.
Внутренне EnumMap использует массив для хранения значений, где индекс массива соответствует порядковому номеру (ordinal()) элемента перечисления. Это делает его быстрее, чем хэш-таблицы (HashMap) и более экономным по памяти.
EnumMap хранит ключи в порядке их объявления в перечислении, что отличает его от большинства других Map (кроме LinkedHashMap).
Так как ключи строго ограничены перечислением, это снижает вероятность ошибок при разработке.
🔍 Пример:
import java.util.EnumMap;
enum Action {
START, STOP, PAUSE
}
public class EnumMapExample {
public static void main(String[] args) {
EnumMap<Action, Runnable> actionMap = new EnumMap<>(Action.class);
// Определяем поведение для каждого значения Enum
actionMap.put(Action.START, () -> System.out.println("Starting the process..."));
actionMap.put(Action.STOP, () -> System.out.println("Stopping the process..."));
actionMap.put(Action.PAUSE, () -> System.out.println("Pausing the process..."));
// Пример вызова
Action currentAction = Action.START;
actionMap.get(currentAction).run();
}
}
#Java #EnumMap6 677
public class Quest {
public static void greet() {
System.out.println("Hello world!");
}
public static void main(String[] args) {
Quest q = null;
q.greet();
}
}