

- Главная
- Каталог
- Интернет технологии
- Java Portal | Программирование

Java Portal | Программирование
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика
Статистика канала
Полная статистикаchevron_right
public double calculateDiscount(String customerType, double amount) {
if (customerType.equals("regular")) {
return amount * 0.05;
} else if (customerType.equals("vip")) {
return amount * 0.1;
} else if (customerType.equals("super-vip")) {
return amount * 0.2;
} else {
return 0;
}
}{}
Такой код:
. трудно читать
. неудобно расширять
. легко сломать при добавлении новых веток
Решение через стратегию:
1. Описываем общий интерфейс:
public interface DiscountStrategy {
double applyDiscount(double amount);
}{}
2. Создаём реализации под разные типы клиентов:
public class RegularDiscount implements DiscountStrategy {
public double applyDiscount(double amount) {
return amount * 0.05;
}
}
public class VipDiscount implements DiscountStrategy {
public double applyDiscount(double amount) {
return amount * 0.1;
}
}
public class SuperVipDiscount implements DiscountStrategy {
public double applyDiscount(double amount) {
return amount * 0.2;
}
}{}
3. Контекст, который применяет выбранную стратегию:
public class DiscountService {
private final DiscountStrategy strategy;
public DiscountService(DiscountStrategy strategy) {
this.strategy = strategy;
}
public double getDiscountedPrice(double amount) {
return strategy.applyDiscount(amount);
}
}{}
4. Подбор реализации во время выполнения:
DiscountStrategy strategy = new VipDiscount();
DiscountService service = new DiscountService(strategy);
double price = service.getDiscountedPrice(1000); // 100.0{}
Теперь каждая логика скидки инкапсулирована в своём классе. Если появляются новые условия, меняется только реализация конкретной стратегии, а не весь метод.
Даже выбор стратегии можно полностью отвязать от if-логики:
Map<String, DiscountStrategy> strategies = Map.of(
"regular", new RegularDiscount(),
"vip", new VipDiscount(),
"super-vip", new SuperVipDiscount()
);
DiscountStrategy strategy = strategies.getOrDefault(customerType, amount -> 0.0);
double result = strategy.applyDiscount(1000);{}
Таким образом, мы избавляемся от условных блоков и делаем код чище, гибче и проще в сопровождении.
👉 Java Portalfor
или forEach
? Потоки позволяют писать короче, чище и читаемее.
Давай разберёмся, как они работают.
Streams в Java дают декларативный способ обработки данных. Вместо того чтобы писать внешние циклы, ты описываешь конвейер операций, который выполняется внутри потока.
Конвейер потока состоит из трёх частей:
I. Источник — начальная точка, обычно это коллекция, массив или I/O-канал.
Пример: numbers.stream()
II. Промежуточные операции — преобразуют поток и возвращают новый поток. Популярные:
• filter → оставляет элементы, удовлетворяющие условию
• map → применяет функцию к каждому элементу
• sorted → сортирует поток
Эти операции ленивые — они не выполняются, пока не вызвана терминальная операция.
III. Терминальная операция — даёт финальный результат или побочный эффект. Примеры:
• collect → собирает элементы в коллекцию
• reduce → сводит элементы к одному значению
• forEach → перебирает элементы и выполняет действие
Потоки могут быть последовательными и параллельными. Последовательные обрабатывают элементы один за другим, а параллельные разбивают работу на несколько потоков. Это мощный инструмент для больших данных, но параллельные потоки стоит использовать осторожно — они добавляют накладные расходы.
К примеру, найти все чётные числа, возвести их в квадрат и собрать в новый список.
👉 Java Portal
String greeting = "Hello, World!";
void main() {
System.out.println(greeting);
}{}
JVM автоматически создаёт неявный класс, в который помещает метод main() и другие верхнеуровневые объявления.
II. Module Import Declarations
Инструкция import module M
равнозначна импорту всех экспортируемых пакетов из модуля M
и его транзитивных зависимостей в текущий модуль.
III. Flexible Constructor Bodies
Позволяет писать инструкции в конструкторе до вызова super() или this().
IV. Удалён 32-битный x86-порт OpenJDK
Из исходников исключены все части, отвечающие за поддержку 32-bit x86. Сборка JDK под эту архитектуру теперь невозможна.
V. Scoped Values
Класс ScopedValue
позволяет обмениваться неизменяемыми данными без передачи их через аргументы методов. Это альтернатива ThreadLocal
. Оба механизма решают одну задачу — перенос значения переменной внутри потока или дерева потоков без явного параметра.
VI. Key Derivation Function API
Функции выработки ключей (KDF) позволяют создавать криптографически стойкие секретные ключи (например, AES) на основе исходного материала (например, пароля) и дополнительных данных (например, соли).
Полный список изменений доступен здесь - https://jdk.java.net/25/release-notes
👉 Java Portal
GET /users?page=3&limit=20{}
Пример ответа
{
"page": 3,
"limit": 20,
"totalPages": 50,
"data": [ ... ]
}{}
Плюсы —> простая реализация, можно прыгнуть сразу на любую страницу
Минусы —> при очень больших смещениях работает медленнее
2. Cursor-based (a.k.a. Keyset — по курсору/ключу)
GET /users?after=125&limit=20{}
Пример ответа
{
"nextCursor": 145,
"data": [ ... ]
}{}
Плюсы —> отлично подходит для больших наборов данных, работает быстро, удобно для бесконечной прокрутки и лент
Минусы —> нельзя сразу перейти к произвольной странице, например к 50-й
3. Token-based (токены вместо ID)
GET /users?cursor=eyJpZCI6MTI1fQ==&limit=20{}
Вместо открытых ID сервер возвращает непрозрачный токен, который клиент подставляет в следующий запрос
Плюсы —> безопасно, не раскрываются реальные ID, больше гибкости для реализации
👉 Java PortalСтатистика
Отзывы канала
Каталог Телеграм-каналов для нативных размещений
Java Portal | Программирование — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 12.7K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 16.8, количество отзывов – 0, со средней оценкой 0.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 4195.8 ₽, а за 9 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий