ar
Feedback
Java | Фишки и трюки

Java | Фишки и трюки

الذهاب إلى القناة على Telegram

Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna

إظهار المزيد
6 954
المشتركون
-124 ساعات
-117 أيام
+1330 أيام
أرشيف المشاركات
⌨️ 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 #FileVisitor

Почему Java - лучший язык для программирования в 2025 году? Если вы до сих пор выбираете новое направление в IT.. рекомендую
Почему Java - лучший язык для программирования в 2025 году? Если вы до сих пор выбираете новое направление в IT.. рекомендую посетить канал Павла Сорокина! Вся выжимка за 5 лет работы Java-разработчиком от ведущего специалиста! 🧑‍💻Выбирайте уровень подготовки и смотрите возможные решения: — Начало положено: Только начали изучать язык, у вас все только впереди! — Улучшение знаний: Высокий доход требует должных знаний - научитесь! — Хочется зарабатывать: Узнаете, как пройти собеседование на топ-работу с первого раза!

⌨️ Параллельное программирование и 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️⃣ Когда обе задачи завершены, выводим общий результат и время выполнения.

photo content

Что выведет код?
Anonymous voting

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);
    }
}

Что вы мечтали получить в подарок к новому году в детстве? Велик, плюс 3 месяца каникул, десять порций мороженого? Эх, детство-детство... НО сейчас-то мы взрослые, умные и осознанные люди – точно знаем, что не бывает ничего лучше, чем собственная база знаний. Принимайте предновогодний подарок – папка "База знаний", в которой собраны ценные каналы, где вы найдете: ▫️Здесь будет много про Пересечение технологий, профессий и реальной жизни. ▫️ Анонсы ивентов из мира IT (митапы, конференции, вебинары, интенсивы, воркшопы). ▫️ Java задачи и тесты В общем, все не перечислить, поэтому – сохраняйте-> Базу знаний - «Разработка», изучайте, выбирайте максимально ценные для вас каналы или подписывайтесь на все. Знаний много не бывает 😉 Хотите в следующую подборку ?

⌨️ Как управлять порядком элементов в 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 #LRU

Эффективная разработка на Spring Boot без ограничений. Пока зарубежные компании отзывают лицензии у пользователей РФ, Amplico
Эффективная разработка на 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 простых шага»

⌨️ 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 #WeakHashMap

Придумать, что дарить близким, — ежегодная задача со звёздочкой. А ведь в детстве можно было просто сделать подарок своими ру
Придумать, что дарить близким, — ежегодная задача со звёздочкой. А ведь в детстве можно было просто сделать подарок своими руками. Чуть-чуть картона, чуть-чуть ваты и частичку души. Яндекс Практикум запустил Студию цифровых поделок, где вы снова сможете делать подарки своими руками, но уже с помощью нейросетей и онлайн-сервисов. Выберите настроение, настройте параметры — и алгоритмы подскажут, что и как можно смастерить. А ещё на странице студии вас ждут приятные бонусы и скидки от Практикума и других сервисов Яндекса. 🎁 Забрать идеи для близких и подарки для себя

⌨️ Как работает 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 #IdentityHashMap

⌨️ 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 #EnumMap

Что выведет код?
Anonymous voting

public class Quest {
    public static void greet() {
        System.out.println("Hello world!");
    }

    public static void main(String[] args) {
        Quest q = null;
        q.greet();
    }
}

Что выведет код?
Anonymous voting

public class Quest {
    public static void main(String[] args) {
        String s = null;
        System.out.println(s instanceof String);
    }
}

🌱 Spring SpEL (Spring Expression Language) — это мощный язык выражений, предоставляемый фреймворком Spring. Он используется для динамической обработки данных, управления конфигурацией и вычисления значений в runtime. SpEL позволяет обращаться к свойствам объектов, вызывать методы, работать с коллекциями, выполнять арифметические и логические операции, а также взаимодействовать с бинами Spring. Основные возможности SpEL: ✔️ Обращение к свойствам: person.name ✔️Вызов методов: person.getName() ✔️ Работа с коллекциями: фильтрация и проекция (list.?[property > 10]). ✔️ Логические и арифметические операции: age > 18 && hasLicense ✔️ Доступ к бинам Spring: @beanName.method() Простой пример:

import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;

public class SpELExample {
    public static void main(String[] args) {
        ExpressionParser parser = new SpelExpressionParser();

        // Пример вычисления простого выражения
        String expression = "'Hello, Spring SpEL!'.toUpperCase()";
        String result = parser.parseExpression(expression).getValue(String.class);

        System.out.println(result); // Вывод: HELLO, SPRING SPEL!
    }
}
Использование в аннотациях:

@Component
public class MyBean {
    @Value("#{T(java.lang.Math).random() * 100}")
    private double randomValue;

    @Value("#{systemProperties['user.name']}")
    private String userName;

    public void printValues() {
        System.out.println("Random Value: " + randomValue);
        System.out.println("User Name: " + userName);
    }
}
✔️ T(java.lang.Math).random() — вызов статического метода Math.random(). ✔️ systemProperties['user.name'] — доступ к системным свойствам. Использование с коллекциями:

import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;

import java.util.Arrays;
import java.util.List;

public class CollectionExample {
    public static void main(String[] args) {
        ExpressionParser parser = new SpelExpressionParser();

        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // Фильтрация списка
        List<Integer> filteredNumbers = (List<Integer>) parser.parseExpression(
                "#numbers.?[#this > 2]").getValue(new StandardEvaluationContext(), numbers);

        System.out.println(filteredNumbers); // Вывод: [3, 4, 5]
    }
}
SpEL является удобным инструментом для внедрения динамического поведения и вычислений в приложениях Spring.

​​Turrit - на основе Telegram (для iOS и Android) Turrit является бесплатным сторонним клиентом, разработанным на основе Tele
​​Turrit - на основе Telegram (для iOS и Android) Turrit является бесплатным сторонним клиентом, разработанным на основе Telegram API. В нем: 🔅 AI-переводчики 🚀 ускорение загрузки в 20 раз 💭 неограниченное облачное хранилище 🌏 онлайн-просмотр видео TikTok 💫 элегантный и простой интерфейс ⛓ защита безопасности и конфиденциальности В настоящее время у Turrit уже более 100 000 ежедневных активных пользователей. В России он также пользуется признанием, вот в форуме 4PDA идет горячее обсуждение. Скачать можно в Google Play и App Store. Присоединяйтесь к официальной группе Turrit!

Что выведет код?
Anonymous voting