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

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

Ir al canal en Telegram

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

Mostrar más
6 953
Suscriptores
-324 horas
-27 días
+630 días
Archivo de publicaciones
⚡️ Дождались! Ребята сделали крутейшие каналы про Айти ⚡️ Здесь сложные темы объясняют на простых картинках, понятном языке.
+4
⚡️ Дождались! Ребята сделали крутейшие каналы про Айти ⚡️ Здесь сложные темы объясняют на простых картинках, понятном языке. А также решаем задачки, делимся ресурсами и советами. Принимаем заявки, не упусти: ⚙️ Webdev | Backend & Frontend 📱 Python | Программирование 😷 Hacking | Кибербезопасность 🖥 CodHub | Программирование 🖥 Memes | Мемы айтишников

⌨️ Метод Stream.reduce() Метод reduce() используется для агрегирования (свёртки) элементов стрима в одно значение. Это мощный инструмент для вычислений, таких как сумма, произведение, конкатенация строк и т. д. 1️⃣ T reduce(T identity, BinaryOperator<T> accumulator) 🟢identity – начальное значение (например, 0 для суммы, 1 для произведения). 🟢accumulator – функция, которая объединяет элементы. ✅ Пример: сумма чисел

List<Integer> numbers = List.of(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);
System.out.println(sum); // 15
2️⃣ reduce(accumulator) (без начального значения)

Optional<T> reduce(BinaryOperator<T> accumulator)
📌 Здесь возвращается Optional<T>, потому что стрим может быть пустым. ✅ Пример: наибольшее число

Optional<Integer> max = numbers.stream().reduce(Integer::max);
max.ifPresent(System.out::println); // 5
3️⃣ reduce(identity, accumulator, combiner) (для параллельных потоков)

<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner)
Пример: длина всех строк в списке

List<String> words = List.of("Java", "Stream", "Reduce");
int totalLength = words.parallelStream()
    .reduce(0, (sum, word) -> sum + word.length(), Integer::sum);
System.out.println(totalLength); // 16
Здесь: 🟢sum + word.length() – считает длину строк, 🟢Integer::sum – объединяет результаты. 💡 Совет: Для простых случаев (сумма, максимум) используйте sum(), max(), count(), а reduce() – для сложных операций. #java #reduce

⌨️ Чтение и запись файла с помощью класса Files Чтение всего файла в список строк (readAllLines)

import java.nio.file.*;
import java.io.IOException;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        Path path = Paths.get("example.txt");
        List<String> lines = Files.readAllLines(path);
        lines.forEach(System.out::println);
    }
}
📌 Читает весь файл в List<String>, удобно для небольших файлов. Запись в файл (write)

List<String> lines = List.of("Первая строка", "Вторая строка");
Files.write(Paths.get("output.txt"), lines);
📌 Если файла нет — создаст, если есть — перезапишет. Добавление в файл (без перезаписи):

Files.write(Paths.get("output.txt"), lines, StandardOpenOption.APPEND);
#java #Files #readAllLines #write

⌨️ Полезные методы Collections 1️⃣ Collections.sort() — сортировка списка

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Вика", "Андрей", "Сергей");
        Collections.sort(names);
        System.out.println(names); // [Андрей, Вика, Сергей]
    }
}
📌 Работает с Comparable. Можно передавать Comparator для кастомной сортировки. 2️⃣ Collections.reverse() — реверс списка

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Collections.reverse(numbers);
System.out.println(numbers); // [5, 4, 3, 2, 1]
3️⃣ Collections.shuffle() — перемешивание элементов

List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
Collections.shuffle(nums);
System.out.println(nums); // случайный порядок, например [3, 1, 5, 2, 4]
💡 Полезно для перемешивания карт, вопросов в викторине и т. д. #java #Collections #sort #reverse #shuffle

🚀 Foreign Function & Memory API – замена JNI в Java 22 В Java 22 появился Foreign Function & Memory API, который позволяет взаимодействовать с C-библиотеками без JNI. 🤔 Зачем он нужен? Безопаснее – нет Unsafe. Проще – не нужно писать C-обёртки. Быстрее – меньше накладных расходов. 📌 Пример выделения памяти без Unsafe:
try (Arena arena = Arena.ofConfined()) {
    MemorySegment segment = arena.allocate(100);
    System.out.println("Memory allocated!");
}
💡 Совет: Используйте этот API для работы с нативными библиотеками вместо JNI. #java #foreignapi #native

😒 На одном кодинге уже давно не вывезешь, перспектива 2025 года - Информационная Безопасность Ловите два канала на тему ИБ и
😒 На одном кодинге уже давно не вывезешь, перспектива 2025 года - Информационная Безопасность Ловите два канала на тему ИБ и хакинга 👍 ZeroDay — канал действующего пентестера. Подробные уроки по безопасности, эксплуатации уязвимостей, социальной инженерии, инструментам и свежие новости. 👍 Белый Хакер — программное обеспечение, утилиты, OSINT, инструменты, полезная литература и много другое. Совершенно новый формат непохожий на другие каналы.

Ну что там у вас с пет-проектами?)
Ну что там у вас с пет-проектами?)

⌨️ Интерфейсы Closeable и AutoCloseable Интерфейсы Closeable и AutoCloseable предназначены для управления ресурсами, которые нужно явно закрывать после использования, например, потоки ввода-вывода, соединения с базами данных и т. д. Однако у них есть некоторые различия. 1️⃣ AutoCloseable появился в Java 7 в связи с введением try-with-resources, это базовый интерфейс для всех ресурсов, которые могут быть автоматически закрыты. В AutoCloseable определен метод:

void close() throws Exception;
То есть, метод close() может выбрасывать любое исключение (Exception). 2️⃣ Closeable наследует AutoCloseable, более специфичен и предназначен в основном для потоков ввода-вывода (I/O). В Closeable метод close() может выбрасывать только IOException. #java #Closeable #AutoCloseable

Как избежать проблем с Parallel Stream? Использование parallelStream() может замедлить программу, если не учитывать его особенности. ➡️ Проблемы: 🟢 Не стоит использовать с маленькими коллекциями – накладные расходы на потоки выше, чем выгода. 🟢 Будьте осторожны с изменяемыми переменными в forEach(). ❌ Ошибка: некорректное изменение общей переменной
int[] sum = {0};
list.parallelStream().forEach(i -> sum[0] += i); // Потенциальная ошибка!
📌 Решение: использовать reduce()
int sum = list.parallelStream().reduce(0, Integer::sum);
💡 Совет: parallelStream() эффективен, если объём данных большой и нет конкурентного доступа. #java #parallelstream #performance

🤔 Почему ThreadLocal может привести к утечкам памяти? ThreadLocal – удобный способ хранения данных в потоке, но может привести к утечкам памяти. ➡️ Проблема: Потоки из ThreadPool не удаляются сразу после завершения работы. Если ThreadLocal не очищается вручную, объект остаётся в памяти, даже если он больше не нужен. 📌 Решение: всегда вызывайте remove()
ThreadLocal<MyClass> threadLocal = ThreadLocal.withInitial(MyClass::new);

try {
    MyClass obj = threadLocal.get();
    // Логика
} finally {
    threadLocal.remove(); // Очищаем объект
}
💡 Совет: Используйте ThreadLocal осторожно, особенно в серверах с ThreadPool, чтобы избежать утечек памяти. #java #threadlocal #memoryleak

📱 Java Developer — мастхев для любого джависта Канал Team Lead'a с полезными советами и практиками для Java-разработчиков: ➖
📱 Java Developer — мастхев для любого джависта Канал Team Lead'a с полезными советами и практиками для Java-разработчиков: Книги, статьи, тестыSpring, Hibernate, Docker, SQLАлгоритмы, вопросы и задачи с собеседований Присоединяйтесь: @java_tg

photo content

⌨️ Класс Formatter java.util.Formatter позволяет создавать отформатированные строки по аналогии с printf() в C. Formatter может форматировать числа, дату, время, выравнивать текст, управлять пробелами и отступами, а так же работать с локалями.

import java.util.Formatter;

public class FormatterExample {
    public static void main(String[] args) {
        try (Formatter formatter = new Formatter()) {
            formatter.format("Привет, %s! Тебе %d лет.", "Андрей", 25);
            System.out.println(formatter);
            // Привет, Андрей! Тебе 25 лет.
        }
    }
}
Можно не просто форматировать строки, но и записывать их в файл:

import java.io.FileNotFoundException;
import java.util.Formatter;

public class FileWriteExample {
    public static void main(String[] args) throws FileNotFoundException {
        try (Formatter formatter = new Formatter("output.txt")) {
            formatter.format("Имя: %s, Возраст: %d%n", "Алиса", 30);
        }
    }
}
Теперь в файле output.txt будет строка: Имя: Алиса, Возраст: 30 #java #Formatter

Карьерная лестница до Сеньора по Java куда проще, чем кажется на самом деле ✈️ Достаточно лишь регулярно читать канал Easy Ja
Карьерная лестница до Сеньора по Java куда проще, чем кажется на самом деле ✈️ Достаточно лишь регулярно читать канал Easy Java. В нём каждый день опытный разработчик бесплатно делится полезными материалами. Учит оптимизировать код, проходить собеседования и работать с закрытыми глазами с помощью плагинов. Пора вырасти с Джуна: @EasyJava

⌨️ Wildcard. Использование с super (ограничение снизу) Иногда нужно работать с базовыми типами (например, добавлять в List<? super Integer> только Integer и его предков):

import java.util.List;
import java.util.ArrayList;

public class WildcardExample {
    public static void addNumbers(List<? super Integer> list) {
        list.add(10);
        list.add(20);
    }

    public static void main(String[] args) {
        List<Number> numberList = new ArrayList<>();
        addNumbers(numberList);
        System.out.println(numberList); // Вывод: [10, 20]
    }
}
🔹 ? super Integer означает, что list может быть списком Integer или его родительских классов (Number, Object). 🔹 Это позволяет безопасно добавлять Integer, но при чтении придется использовать Object. #java #wildcard

Начало года — отличное время для карьерного рывка! Выпускники Открытых школ Т1 успешно прошли обучение и присоединились к команде ИТ-холдинга Т1. 💡 А какие у тебя цели на 2025? Начни его с профессионального роста! Открытые школы Т1 — это: ✔️ бесплатный ИТ-интенсив для Java-разработчиков с опытом от года ✔️ гибкий онлайн-формат: всего 1 месяц обучения по вечерам из любого города РФ и РБ ✔️ прокачка Java-скилов и знакомство с масштабными ИТ-проектами ✔️ шанс получить оффер в аккредитованный ИТ-холдинг с топовыми условиями: современный техстек, удаленка и крутые офисы, ДМС, обучение 🎯 Подавай заявку до 14 марта и будь среди тех, кто превращает мечты в реальность! Обучение начнется уже 17.03! Реклама. ООО "ГК "ИННОТЕХ". ИНН 9703073496. erid: 2W5zFJR4Gi4

⌨️ Wildcard. Использование с extends (ограничение сверху) Если мы хотим работать только с числами (Number и его потомками), можно использовать ? extends Number:

import java.util.List;

public class WildcardExample {
    public static double sumNumbers(List<? extends Number> list) {
        double sum = 0;
        for (Number num : list) {
            sum += num.doubleValue();
        }
        return sum;
    }

    public static void main(String[] args) {
        List<Integer> intList = List.of(1, 2, 3);
        List<Double> doubleList = List.of(1.1, 2.2, 3.3);

        System.out.println(sumNumbers(intList)); // Вывод: 6.0
        System.out.println(sumNumbers(doubleList)); // Вывод: 6.6
    }
}
🔹 ? extends Number означает, что list может быть списком любого подкласса Number (Integer, Double, Float и т. д.). 🔹 Это позволяет безопасно читать значения, но не добавлять новые (аналогично <?>). #java #wildcard

🎥 Приглашаем вас на вебинар "Обзор децентрализованных web3 приложений (dApp) 2025 года". 📝 На уроке: - Проведём обзор самых
🎥 Приглашаем вас на вебинар "Обзор децентрализованных web3 приложений (dApp) 2025 года". 📝 На уроке: - Проведём обзор самых интересных и перспективных децентрализованных приложений (dApp), которые сейчас активно развиваются в экосистеме Web3. - Узнаете, как устроены dApp, какие технологии лежат в их основе (блокчейн, смарт-контракты, криптография) и как они меняют привычные подходы к взаимодействию пользователей с интернетом. - Разберём примеры из разных сфер: DeFi (децентрализованные финансы), NFT, GameFi, социальные сети и другие. 💪 В результате получите: - Понимание, что такое dApp и как они работают. - Обзор самых популярных и инновационных децентрализованных приложений. - Представление о том, как можно использовать dApp в различных сферах жизни. - Вдохновение и идеи для собственных проектов в Web3. Приходите на вебинар и получите скидку на большое обучение «Solidity Developer» и выходите на новый уровень в блокчейн-разработке. Для участия зарегистрируйтесь: https://otus.pw/dFge/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

⌨️ Неограниченным wildcard <?> В Java <?> называется неограниченным wildcard. Он обозначает, что параметр типа может быть любым, то есть неизвестным на этапе компиляции. Это удобно, когда метод или класс работают с обобщёнными типами, но конкретный тип элемента не важен. Например, выражение List<?> означает список, элементы которого могут быть любого типа. Такой подход позволяет писать более универсальный и гибкий код, но при этом накладывает ограничения: мы не можем добавлять новые элементы в коллекцию, поскольку компилятор не знает конкретный тип элементов, чтобы обеспечить безопасность типов. ✔️ Прием метода, работающего с любым типом списка

import java.util.List;

public class WildcardExample {
    public static void printList(List<?> list) {
        for (Object element : list) { // Элементы можно читать как Object
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        List<Integer> intList = List.of(1, 2, 3);
        List<String> strList = List.of("A", "B", "C");

        printList(intList); // Вывод: 1 2 3
        printList(strList); // Вывод: A B C
    }
}
Здесь List<?> позволяет передавать любой тип списка, но мы можем безопасно читать только как Object. Ограничение на добавление элементов

public static void addElement(List<?> list) {
    // list.add("Hello"); // Ошибка компиляции!
}
#java #wildcard

⌨️ Что такое текстовые блоки (Text Blocks)? Text Blocks (""") позволяют удобно работать с многострочными строками без необходимости экранировать кавычки. Улучшают читаемость кода. Поддерживают форматирование и перенос строк. Упрощают работу с JSON, SQL и HTML. ✔️ Пример:

String json = """
    {
        "name": "Alice",
        "age": 30
    }
    """;

System.out.println(json);
💡 Совет: Используйте Text Blocks для удобного написания больших строковых данных. #java #textblocks #java15