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

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

Open in Telegram

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

Show more
6 954
Subscribers
-124 hours
-117 days
+1330 days
Posts Archive
public class Quest {
    public static final Quest INSTANCE = new Quest();
    private final int yearsAgo;
    private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);

    private Quest() {
        yearsAgo = CURRENT_YEAR - 2000;
    }

    public int yearsAgo() {
        return yearsAgo;
    }

    public static void main(String[] args) {
        System.out.println(INSTANCE.yearsAgo());
    }
}

Блиц-тестирование на грейд в Java Менторы ШОРТКАТ собрали полезный небольшой тест, который поможет тебе проверить знания. Кон
Блиц-тестирование на грейд в Java Менторы ШОРТКАТ собрали полезный небольшой тест, который поможет тебе проверить знания. Конечно, это не определит грейд точно, но даст понять, какие темы западают. За прохождение ещё и дадут скидку на менторство. Переходи в бот, чтобы пройти тест: @shortcut_sh_bot Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxDv1BP

⌨️ Простой пример использования Project Reactor, который демонстрирует основы работы с Mono и Flux.

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

public class ProjectReactorExample {
    public static void main(String[] args) {
        // Пример с Mono
        Mono<String> monoExample = Mono.just("Hello, Reactor!");
        monoExample
            .map(String::toUpperCase) // Преобразуем строку в верхний регистр
            .subscribe(System.out::println); // Подписываемся и выводим результат

        // Пример с Flux
        Flux<Integer> fluxExample = Flux.just(1, 2, 3, 4, 5);
        fluxExample
            .filter(num -> num % 2 == 0) // Фильтруем четные числа
            .map(num -> num * num) // Возводим в квадрат
            .subscribe(System.out::println); // Подписываемся и выводим результат
    }
}
🔍 Что происходит в коде? 1. Mono: - Создаем экземпляр Mono с помощью Mono.just(), передавая строку. - Используем метод map(), чтобы преобразовать строку в верхний регистр. - Подписываемся на Mono с помощью subscribe, который выводит результат. 2. Flux: - Создаем экземпляр Flux с числовыми значениями от 1 до 5. - Фильтруем четные числа с помощью filter(). - Применяем map(), чтобы возвести каждое четное число в квадрат. - Подписываемся на Flux и выводим результат.

2024 все.. а ты еще не разработчик? нет опыта, не хватает идей и времени, высокая конкуренция. Оставь эти отговорки в 2024! И
2024 все.. а ты еще не разработчик? нет опыта, не хватает идей и времени, высокая конкуренция. Оставь эти отговорки в 2024! И читай здесь, что нужно для успешной карьеры 👇 - актуальные навыки в 2025. Чем быстрее адаптируешься к запросам рынка, тем выше твоя зп 😉 - идеи для проектов, современные инструменты разработки (Jira, GitHub, Miro) - успешное прохождение интервью Не понимаешь, как это реализовать? Тогда приходи на мощный 3-х дневный интенсив «Пошаговый гайд к работе Java Dev в 2025» от FAANG SCHOOL. И у тебя полностью перевернется представление о том, как действительно выглядит рынок IT! - какие навыки изучить в первую очередь - как выбирать актуальные идеи для проекта - ошибки, из-за которых 80% проектов оказываются провальными - как преодолеть фильтры HR без накрутки опыта ⬇️ Пока ты думаешь, кто-то получает твой оффер! Переходи, забирай подарок и узнай, как даже джуну создать проект, способный обеспечить пассивный доход!

🚀 Реактивное программирование с помощью Project Reactor Реактивное программирование — это новый подход к созданию асинхронных и масштабируемых приложений. Project Reactor — библиотека для Java, которая делает этот процесс простым и эффективным. 🔍 Что такое Project Reactor? Project Reactor предоставляет инструменты для работы с потоками данных, основанные на спецификации Reactive Streams. Это дает возможность обрабатывать асинхронные события, используя: 1. Mono: асинхронный поток, который возвращает 0 или 1 элемент. Идеален для единичных значений. 2. Flux: поток, который может вернуть 0, 1 или много элементов. Отлично подходит для работы с коллекциями данных. ⚡ Преимущества Project Reactor: 🏎️ Высокая производительность: Неблокирующая модель усиливает эффективность использования ресурсов. 🛠️ Простой в обработке ошибок: Реактивные методы делают управление ошибками интуитивным. 📜 Читабельный код: Операторы позволяют писать более чистый и понятный код.

Подробно рассказываем о высокопроизводительных решениях с фреймворком userver на новом бесплатном вебинаре! Он предназначен д
Подробно рассказываем о высокопроизводительных решениях с фреймворком userver на новом бесплатном вебинаре! Он предназначен для создания надежных и молниеносных микросервисов и веб-серверов. Освойте передовой C++ фреймворк всего за 90 минут!  ✅ Вы узнаете: - Уникальные архитектурные особенности и преимущества userver, которые сделают вашу работу легче и эффективнее. - Как быстро настроить окружение и запустить свой первый проект, не тратя лишнего времени. - Советы высококлассных профессионалов по работе с асинхронностью, которые помогут вам стать мастером своего дела и очень много другой полезной сочной информации! 📌Получите практический и ценный опыт работы с userver, который можно сразу применить в своих проектах - регистрируйтесь по ссылке: https://clck.ru/3F9DAQ?erid=LjN8K92wW  P.S. Все зарегистрированные участники получат приличную скидку на обновленный топовый курс «C++ Developer. Professional» Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

⌨️ Метод Stream.distinct() Если у вас есть поток, который может содержать повторяющиеся элементы, используйте операцию distinct(), чтобы удалить их.

var list = Arrays.asList(1, 2, 3, 3, 4, 5, 5);
var distinctList = list.stream()
                       .distinct()
                       .collect(Collectors.toList());
// distinctList: [1, 2, 3, 4, 5]

🌟 Функциональное программирование с Vavr: Пример использования Сегодня мы рассмотрим, как библиотека Vavr может упростить обработку ошибок и повысить читаемость вашего кода. Пример использования Vavr: Обработка ошибок с помощью Try Представьте, что у вас есть метод, который выполняет операцию деления, и вам нужно обработать возможные ошибки, например деление на ноль. Вместо стандартного подхода с try-catch, мы можем использовать класс Try из Vavr, который автоматически обрабатывает исключения. Вот как это можно сделать:

import io.vavr.control.Try;

public class VavrExample {
    public static void main(String[] args) {
        // Попробуем выполнить деление
        Try<Double> result = Try.of(() -> divide(10, 0)); // Делим на ноль

        // Обработка результата
        result.onSuccess(value -> System.out.println("Результат: " + value)) // Если успешно
              .onFailure(ex -> System.out.println("Ошибка: " + ex.getMessage())); // Если произошла ошибка
    }

    // Метод деления
    private static double divide(int a, int b) {
        return a / b; // Здесь может произойти исключение
    }
}
Как это работает? 1. Try.of(): Мы оборачиваем вызов метода деления в Try. Если операция пройдет успешно, метод вернет значение. Если произойдет исключение (например, деление на ноль), это исключение будет перехвачено и "записано" в объект Try. 2. onSuccess(): Этот метод вызывается, если операция прошла успешно. В нашем случае, он выводит результат деления в консоль. 3. onFailure(): Этот метод вызывается, если произошла ошибка. Он позволяет легко обработать исключение, например, выведя сообщение об ошибке. #Java #ФункциональноеПрограммирование #Vavr

🚀 Усовершенствования в области параллелизма: Project Loom Project Loom — это инициатива в Java, которая вводит легковесные потоки (или корутины), делая асинхронное программирование более простым и понятным. Он позволяет разработчикам создавать и управлять огромным количеством потоков с минимальными затратами на ресурсы. Почему это важно? С использованием Project Loom вы сможете писать асинхронный код в синхронном стиле, что улучшает читаемость и упрощает отладку. Это значит меньше вложенных колбеков и легче управляемый код. Как это работает? Потоки в Project Loom называются "виртуальными", и вы можете создавать их так же просто, как обычные:

public class LoomExample {
    public static void main(String[] args) {
        // Создаем виртуальный поток
        Thread.startVirtualThread(() -> {
            System.out.println("Hello from a virtual thread!");
        });

        // Основной поток продолжает работу
        System.out.println("Hello from the main thread!");
    }
}
В этом примере мы создаем виртуальный поток, который выводит сообщение в консоль. Основной поток продолжает выполнять свою работу параллельно, что показывает, как просто можно организовать параллелизм без сложных конструкций. Project Loom облегчает жизнь разработчикам, позволяя создавать многопоточные приложения проще и удобнее.

Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата после трудоустройства Образовательный
Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата после трудоустройства Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих и тех, кто стремится улучшить свои навыки. Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6-8 месяцев вы сможете достичь уровня middle, для этого нужно уделять обучению от 20 часов в неделю. Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, и помогать готовиться к собеседованиям. Плюсы курса: ➕Гарантированное трудоустройство с зарплатой от 140 000 рублей. ➕Оплата после выхода на работу: вы платите только 20% от зарплаты в течение 18 месяцев. ➕Карьерная поддержка даже после окончания курса. ➕Если по каким-то причинам вы не сможете завершить обучение, это можно сделать без оплаты. Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, которые станут вашими рабочими инструментами в IT-компаниях. Программа курса: ▪️Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git ▪️Проект ▪️Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований) ▪️Прохождение реальных собеседований Узнать подробности и записаться на курс «Java-разработчик» можно на EdMe.pro Отбор включает тестовое задание, которое под силу выполнить человеку без опыта, и собеседование. Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2VtzqwacuhS

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

public class Quest {
    public static void main(String[] args) {
        System.out.println(4_32l + 4_32l);
    }
}

⌨️ Пример реализации Dependency Injection с использованием Reflection Продолжаем тему метапрограммирования и поговорим о том, как реализовать паттерн проектирования Dependency Injection (DI) с использованием рефлексии. DI позволяет нам разделить зависимости и упростить управление ими, что делает код более чистым и тестируемым. Пример: Простой контейнер для Dependency Injection В этом примере мы создадим простой контейнер, который будет автоматически связывать зависимости на основе аннотаций. Для этого нам понадобятся: 1. Аннотация @Inject для пометки полей, которые мы хотим внедрить. 2. Контейнер для обработки аннотаций и создания объектов. Шаг 1: Создаем аннотацию

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@interface Inject {}
Шаг 2: Создаем классы с зависимостями

class Service {
    public void serve() {
        System.out.println("Service is working!");
    }
}

class Client {
    @Inject
    private Service service;

    public void doSomething() {
        service.serve();
    }
}
Шаг 3: Реализуем контейнер для Dependency Injection

import java.lang.reflect.Field;

class DIContainer {
    public static void inject(Object obj) {
        Class<?> clazz = obj.getClass();
        
        for (Field field : clazz.getDeclaredFields()) {
            if (field.isAnnotationPresent(Inject.class)) {
                try {
                    field.setAccessible(true); // Делаем поле доступным
                    Object dependency = field.getType().getDeclaredConstructor().newInstance(); // Создаем экземпляр зависимости
                    field.set(obj, dependency); // Внедряем зависимость
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
Шаг 4: Используем наш контейнер

public class Main {
    public static void main(String[] args) {
        Client client = new Client();
        DIContainer.inject(client); // Внедряем зависимости

        client.doSomething(); // Вывод: Service is working!
    }
}
Как это работает? 1️⃣ Мы создаем аннотацию @Inject, чтобы пометить поля, которые должны быть внедрены. 2️⃣ В классе Client поле service помечено этой аннотацией. 3️⃣ Контейнер DIContainer проходит по полям класса, ищет аннотацию @Inject, и, если находит, создает объект зависимости и устанавливает его в поле. 4️⃣ Когда мы вызываем метод doSomething, объект Service успешно внедрен, и мы можем использовать его методы. #Java #Метапрограммирование #DependencyInjection

Новогодний список: ёлка, мандарины и карьерный рост! 🎇 Новый год — шанс стать лучшей версией себя. Как раз для этого и созда
+4
Новогодний список: ёлка, мандарины и карьерный рост! 🎇 Новый год — шанс стать лучшей версией себя. Как раз для этого и создан бесплатный онлайн-интенсив в Открытых школах Т1 для Java-разработчиков с опытом от года. За месяц ты сможешь поднять свои скилы на новый уровень и познакомиться с ИТ-холдингом Т1, а после — принять участие в offer weeks. 📆 Быстрое обучение: 1 месяц. 💻 Гибкий формат: все этапы проходят онлайн, занятия — по вечерам. Почему в Т1 классно? 🔹Уникальный рыночный опыт и масштабные ИТ-проекты для ключевых отраслей экономики. Разработки Т1 ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и других. 🔹Быстрый рост в ИТ при экспертной поддержке. Карьерные треки для выпускников Открытых школ позволяют быстро расти в профессии. 🔹Бигтех-культура и айтишные бонусы: ИТ-аккредитация, современный техстек, ДМС, удаленка, крутые офисы, спорт, обучение, ИТ-конференции, программы признания и развития и многое другое от Т1. Подай заявку на интенсив до 14.01, и пусть 2025 принесёт тебе не только подарки, но и карьерный рост! Реклама. ООО «Т1» ИНН: 7720484492. Erid: 2SDnjdhR9hM

⌨️Метапрограммирование: Использование Reflection для динамического изменения кода Reflection — это механизм в Java, который позволяет программам анализировать и манипулировать объектами во время выполнения. С помощью рефлексии вы можете: ✔️ Получать информацию о классах, методах и полях. Это позволяет динамически исследовать структуры данных вашего приложения. ✔️ Создавать экземпляры классов: Вы можете создавать объекты, не зная их тип на этапе компиляции. ✔️ Вызывать методы динамически: Это дает возможность запускать методы объектов, основываясь на их именах, переданных в виде строк. ✔️ Изменять значения полей: Вы можете динамически изменять значения полей объектов, что может быть особенно полезно в контексте тестирования или сериализации. Преимущества использования рефлексии: ✔️ Потенциал для создания более абстрактного кода: Вы можете реализовать паттерны проектирования, такие как Dependency Injection. ✔️ Упрощение работы с библиотеками и фреймворками: Многие популярные библиотеки, такие как Spring и Hibernate, активно используют рефлексию для создания и управления объектами. В следующем посте мы рассмотрим конкретные примеры использования рефлексии на практике. Оставайтесь с нами! 🚀 #Java #Метапрограммирование #Reflection

Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата после трудоустройства Образовательный
Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата после трудоустройства Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих и тех, кто стремится улучшить свои навыки. Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6-8 месяцев вы сможете достичь уровня middle, для этого нужно уделять обучению от 20 часов в неделю. Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, и помогать готовиться к собеседованиям. Плюсы курса: ➕Гарантированное трудоустройство с зарплатой от 140 000 рублей. ➕Оплата после выхода на работу: вы платите только 20% от зарплаты в течение 18 месяцев. ➕Карьерная поддержка даже после окончания курса. ➕Если по каким-то причинам вы не сможете завершить обучение, это можно сделать без оплаты. Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, которые станут вашими рабочими инструментами в IT-компаниях. Программа курса: ▪️Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git ▪️Проект ▪️Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований) ▪️Прохождение реальных собеседований Узнать подробности и записаться на курс «Java-разработчик» можно на EdMe.pro Отбор включает тестовое задание, которое под силу выполнить человеку без опыта, и собеседование. Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2VtzqwacuhS

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

public class Quest {
    public static void main(String[] args) {
        System.out.print(op1() + op2() * op3());
    }

    private static int op1() {
        System.out.print(1);
        return 1;
    }
    private static int op2() {
        System.out.print(2);
        return 2;
    }
    private static int op3() {
        System.out.print(3);
        return 3;
    }
}
#java #quest

⌨️ Использование Fixed Thread Pool 1️⃣ Создание пула потоков Для начала нужно создать экземпляр ExecutorService, который будет представлять ваш пул потоков. В этом примере мы создадим фиксированный пул из 5 потоков:
ExecutorService executor = Executors.newFixedThreadPool(5);
2️⃣ Отправка задач для выполнения После создания пула, вы можете отправлять ему задачи с помощью метода submit(). В качестве примера, давайте создадим несколько задач, которые будут выполняться параллельно:
for (int i = 0; i < 10; i++) {
    final int taskId = i;
    executor.submit(() -> {
        System.out.println("Задача " + taskId + " выполняется в: " + Thread.currentThread().getName());
        // Имитация длительной задачи
        try {
            Thread.sleep(1000); // Задержка на 1 секунду
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        System.out.println("Задача " + taskId + " завершена в: " + Thread.currentThread().getName());
    });
}
3️⃣ Завершение работы пула После того как все задачи были отправлены, важно завершить работу пула, чтобы освободить ресурсы:
executor.shutdown(); // Ждем завершения всех задач
В этом примере создается пул из 5 потоков, и на него отправляется 10 задач. Поскольку пул состоит из 5 потоков, одновременно будут выполняться не более 5 задач. Остальные задачи будут ожидать своей очереди. Это демонстрирует, как Thread Pool управляет ресурсами и оптимизирует обработку задач. При использовании Thread Pool вы можете быть уверены, что ваше приложение будет работать более эффективно, избегая затрат на создание новых потоков и управляя нагрузкой на систему. #java #FixedThreadPool

💼 Декабрьский челлендж для алготрейдеров! Используешь роботов в торговле на бирже? Тогда заходи в Терминал или приложение Т-
💼 Декабрьский челлендж для алготрейдеров! Используешь роботов в торговле на бирже? Тогда заходи в Терминал или приложение Т-Банка, нажимай на кнопку «Участвовать», подключай брокерский счет и готовься к конкурсу от Т-Инвестиций. С 2 по 13 декабря твой робот должен совершить минимум 1000 сделок. По итогам конкурса выберем трейдеров с самой высокой доходностью в двух категориях: портфели до 1 млн руб. и от 1 млн руб. Лидеры категорий разделят между собой призовой фонд в размере 550 000 рублей. Узнать больше про конкурс можно тут. P.S.📚 А если не торгуешь, но эта тема интересна - то изучи Invest API для подключения торговых роботов, готовый sdk и примеры роботов других участников. Сроки акции с 2.12.2024 по 13.12.2024. Подробнее об организаторе акции, порядке её проведения, призах, сроках, месте и порядке их получения на tbank.ru. АО «ТБанк». Реклама.