
Получите клиентов в любой нише!
Делегируйте запуск рекламы нам — бесплатно
Подробнее

РегистрацияВойтиВойти
Скидка 3,5% на первые три заказа
Получите скидку на первые три заказа!
Зарегистрируйтесь и получите скидку 3,5% на первые рекламные кампании — промокод активен 7 дней.
21.0

Java | Фишки и трюки
5.0
25
Интернет технологии
659
14
Аудитория канала - начинающие или опытные Java программисты. Канал о разработке приложений на Java, в том числе написание бэкенд и web-приложений. Рассматриваются фишки и трюки при программировании на Java.
Поделиться
В избранное
Купить рекламу в этом канале
Формат:
keyboard_arrow_down
- 1/24
- 2/48
- 3/72
- 7 дней
- Репост
1 час в топе / 24 часа в ленте
Количество:
%keyboard_arrow_down
- 1
- 2
- 3
- 4
- 5
- 8
- 10
- 15
Стоимость публикации:
local_activity
2 237.76₽2 237.76₽local_mall
0.0%
Осталось по этой цене:0
Последние посты канала
☕️ `var` в Java — типы без шума
Java 10 принес
var
— возможность писать меньше кода без потери типов. Он не делает Java динамической, но помогает писать чище и быстрее.
⚡️ До и после var
📌 Было:
HashMap<String, List<Integer>> map = new HashMap<String, List<Integer>>();{}
📌 Стало:
var map = new HashMap<String, List<Integer>>();{}
👉 Код стал вдвое короче, но компилятор по-прежнему знает точный тип.
🔁 Циклы:
var list = List.of("A", "B", "C");
for (var item : list) {
System.out.println(item);
}{}
🔍 item
— автоматически String
. Работает идеально с Map
:
var map = Map.of("one", 1, "two", 2);
for (var entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}{}
🔄 Stream API
var names = List.of("john", "jane", "max");
var upper = names.stream()
.map((var name) -> name.toUpperCase())
.filter(n -> n.startsWith("J"))
.toList();{}
👉 Лаконично, читаемо, с сохранением типовой строгости.
🧪 Использование с методами
var user = getUser(); // Что возвращает getUser?{}
⚠️ Неочевидно. Лучше явно:
User user = getUser();{}
или хотя бы:
var user = getUser(); // getUser() → User{}
✍️ Пиши комментарий, если тип важен для читаемости.
💡 Когда var
— 🔥
Тип очевиден из правой части:
var url = new URL("https://example.com");
{}
Тип слишком громоздкий:
var map = new HashMap<String, Map<Integer, Set<List<String>>>>();
{}
В локальных временных переменных:
var tmp = Files.readAllLines(Path.of("file.txt"));
{}
❌ Когда лучше не использовать
var result = doStuff();{}
⚠️ Тип неочевиден — хуже читается. Особенно в API, сигнатурах и публичных методах:
// Так нельзя
public var getUser() { ... }{}
📛 var
работает только локально, и только с инициализацией:
var x; // ❌ ошибка
var list = null; // ❌ ошибка{}
🗣️ Запомни: var
— не фишка ради фишки. Он помогает избавиться от шума там, где типы очевидны. Не злоупотребляй, но используй — особенно в стримах, циклах, дженериках и временных переменных.421
16:12
18.06.2025
imageИзображение не доступно для предпросмотра
🐍💩👩💻👩💻🧑💻🧑💻🐧👩💻🧑💻👩💻👩💻
В сети начали массово сливать курсы и книги известных онлайн школ по айти
Вот отсортированная база с тонной материала (постепенно пополняется):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++/C#
(343 видео, 87 книги) — Java/QA
(176 видео, 32 книги) — Git/Linux
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP/1С
(227 видео, 83 книги) — SQL/БД
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go/Rust
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(136 видео, 33 книги) — PM/HR
Скачивать ничего не нужно — все выложили в Telegram
651
14:12
18.06.2025
🧵 Virtual Threads (Project Loom) — тысячи потоков без overhead’а
Хочешь запускать 10 000 параллельных задач в Java без боли с thread pool?
Теперь можно — с virtual threads. Это не абстракция, это реальность с Java 21.
🔧 Пример 1: 100 000 задач — без проблем
import java.util.concurrent.*;
public class Demo {
public static void main(String[] args) {
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 100_000; i++) {
executor.submit(() -> {
Thread.sleep(1000);
return null;
});
}
}
}
}{}
⏱️ В обычных потоках такой код бы уронил JVM или занял бы гигабайты памяти.
А здесь — запускается моментально.
🔧 Пример 2: простой виртуальный поток без Executor'а
Thread.startVirtualThread(() -> {
System.out.println("Привет из виртуального потока!");
});{}
Никаких ExecutorService, никаких пулов — просто и понятно.
🔧 Пример 3: параллельные HTTP-запросы
var urls = List.of(
"https://example.com", "https://google.com", "https://github.com"
);
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
urls.forEach(url -> executor.submit(() -> {
var content = new String(new URL(url).openStream().readAllBytes());
System.out.println("Получено с " + url + ": " + content.length() + " байт");
}));
}{}
📎 Virtual threads идеально подходят для сетевого I/O.
🔧 Пример 4: обработка запросов к серверу
while (true) {
var socket = serverSocket.accept();
Thread.startVirtualThread(() -> handle(socket));
}{}
Каждое подключение — отдельный виртуальный поток.
Такой сервер обрабатывает десятки тысяч клиентов — легко.
🗣️ Запомни: Ты больше не пишешь async-коллбеки и не страдаешь с пулом.
Теперь можно писать простой, читаемый blocking-код,
а JVM делает всю тяжёлую работу под капотом.873
17:12
17.06.2025
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
Айтишники поймут
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
964
15:12
17.06.2025
💎 Clean Code на Java — идиоматические приёмы, которые реально работают
Хочешь писать Java-код, который приятно читать и легко сопровождать?
Вот не теория с книжек, а настоящие идиомы, шаблоны и фишки, которые делают код чистым, понятным и «живым».
👍 1. Именование — полдела
❌ Плохо:
double d = get(a, b);{}
✔️Лучше:
double distance = calculateDistance(startPoint, endPoint);{}
Именуй переменные и методы так, чтобы код сам говорил, что он делает.
👍 2. if без else — код легче читать
❌ Было:
if (isAdmin) {
grantAccess();
} else {
denyAccess();
}{}
✔️ Стало:
if (!isAdmin) {
denyAccess();
return;
}
grantAccess();{}
Меньше вложенности → легче читать.
👍 3. Меньше булевых флагов
❌ Неочевидно:
public void start(boolean silent) {
if (!silent) {
System.out.println("Starting...");
}
// ...
}{}
✔️ Читаемо:
public void startLoud() {
System.out.println("Starting...");
start();
}
public void start() {
// ...
}{}
Выноси поведение в отдельные методы, а не в булевы флаги.
👍 4. Используй Optional вместо null
❌ Потенциальный NPE:
String name = user.getName();{}
✔️ Безопаснее:
Optional<String> name = user.getNameOptional();
name.ifPresent(System.out::println);{}
Optional показывает, что значение может отсутствовать.
👍 5. Выражай намерение через enum
❌ Магические числа:
send(2);{}
✔️ Ясно:
send(Priority.HIGH);{}
enum передаёт смысл.
👍 6. Строим объекты читаемо: builder
❌ Плохо читается:
User u = new User("Ann", 25, true, "Russia", null, false);{}
✔️ Круто:
User user = User.builder()
.name("Ann")
.age(25)
.active(true)
.country("Russia")
.build();{}
Именованные параметры через builder — читабельность x10.
👍 7. Используй switch-expression в Java 14+
❌ Старый подход:
int days;
switch (month) {
case JANUARY: days = 31; break;
case FEBRUARY: days = 28; break;
// ...
}{}
✔️ Современный:
int days = switch (month) {
case JANUARY, MARCH, MAY -> 31;
case FEBRUARY -> 28;
default -> throw new IllegalArgumentException();
};{}
Чётко, лаконично, без лишнего кода.
👍 8. Чистые методы = маленькие и простые
❌ Монстр:
public void registerUser(UserDto dto) {
validate(dto);
saveToDatabase(dto);
sendWelcomeEmail(dto);
logRegistration(dto);
}{}
✔️ Разбиваем:
public void registerUser(UserDto dto) {
validate(dto);
persist(dto);
notify(dto);
}
private void validate(UserDto dto) { ... }
private void persist(UserDto dto) { ... }
private void notify(UserDto dto) { ... }{}
Каждый метод делает одну вещь. Легко тестировать, легко читать.
👍 9. Предпочитай Streams + map/filter/collect
❌ Старый for:
List<String> active = new ArrayList<>();
for (User u : users) {
if (u.isActive()) {
active.add(u.getName().toUpperCase());
}
}{}
✔️ Современно:
List<String> active = users.stream()
.filter(User::isActive)
.map(u -> u.getName().toUpperCase())
.collect(Collectors.toList());{}
Чисто, выразительно, без шума.
👍 10. Старайся не ловить Exception без причины
❌ Так себе:
try {
Thread.sleep(100);
} catch (Exception e) {
// игнорируем
}{}
✔️ Так лучше:
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
}{}
Нельзя просто проглатывать ошибки — это превращается в хаос.
🗣️ Запомни:
Clean code — это не строгость, а удобство.
Читаемый код — это код, который ты поймёшь через 3 месяца в 2 часа ночи.
Не бойся переписывать, выносить, называть по-человечески — в этом сила Java-разработчика.991
09:31
16.06.2025
imageИзображение не доступно для предпросмотра
Онлайн-доски теперь в Битрикс24
Можно не только вести проекты и общаться по видео, но и визуализировать идеи вместе с командой. Бесплатно, удобно, без лишних движений. Стратегии больше не будут прежними.
Зарегистрироваться
#реклама 16+
bitrix24.ru
О рекламодателе
933
08:12
16.06.2025
imageИзображение не доступно для предпросмотра
⚙️ Оптимизация Collections и Stream API — как это делать профессионально
Используешь Stream в Java 8+? Только не думай, что это всегда просто и быстро. В этой статье — реальные кейсы и трюки, которые позволят ускорить обработку коллекций и избежать типичных ошибок.
В статье ты узнаешь:
📌 Лучшие приёмы работы со Stream, чтобы избежать лишней аллокации
📌 Когда Stream быстрее цикла, а когда цикл — всё же король производительности
📌 Практические советы: избегать лишних объектов, использовать правильные методы сборки
📌 Ускорение благодаря профайлингу и тому, как выжать максимум из JIT
➡️ Читайте и наслаждайтесь
🗣️ Java всегда сильна в коллекциях — сделай свой код быстрее и чище уже сегодня!
🤩 Java Фишки и трюки || #Cтатья
1312
13:25
14.06.2025
🚀 Java Stream API: продвинутые приёмы и подводные камни
Stream API — мощный инструмент, но легко попасть в ловушку, если не знать нюансов.
✅ Фишки, которые нужно знать
🟢 Фильтрация и преобразование в одну строку:
List<String> names = users.stream()
.filter(u -> u.isActive())
.map(User::getName)
.collect(Collectors.toList());{}
🟢 Собрать в Map без дублирующих ключей:
Map<Long, String> map = users.stream()
.collect(Collectors.toMap(
User::getId,
User::getName,
(a, b) -> a // если дубликат — оставить первый
));{}
🟢 Группировка и сортировка:
Map<String, List<User>> grouped = users.stream()
.collect(Collectors.groupingBy(User::getRole));{}
⚠️ Подводные камни
🟢 Не перезапускается!
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
// stream.forEach(...) // ❌ выбросит исключение — уже использован{}
🟢 Ленивая природа:
Stream.of("a", "b", "c")
.filter(s -> {
System.out.println("filter: " + s);
return true;
});
// ничего не произойдёт, пока не вызвать .collect() или .forEach(){}
🟢 Null внутри Stream — плохая идея:
Stream.of("a", null, "b"); // ❌ NPE при map/filter{}
Лучше фильтровать:
Stream.of("a", null, "b")
.filter(Objects::nonNull)
.map(String::toUpperCase)
.forEach(System.out::println);{}
🔍 Продвинутый пример
Фильтруем активных, сортируем по дате, берём 10 последних:
List<Post> recent = posts.stream()
.filter(Post::isActive)
.sorted(Comparator.comparing(Post::getCreatedAt).reversed())
.limit(10)
.collect(Collectors.toList());{}
🗣️ Запомни: Stream API — кайф, если понимаешь, что делаешь.
Всегда помни про однократность, лень и null — и всё будет летать.1333
15:02
13.06.2025
imageИзображение не доступно для предпросмотра
🤩Нашли для вас топовые каналы, которые реально научат вас программировать!
Free Znanija — огромная база курсов по ИТ, которые можно скачать совершенно бесплатно;
IT библиотека — самая огромная библиотека книг по IT во всём телеграмме
Hacking & InfoSec Base — канал действующего белого хакера. Подробные уроки по безопасности, эксплуатации уязвимостей, социальной инженерии.
🫵Подпишись, чтобы не потерять самые полезные материалы!
666
13:00
13.06.2025
🌀 Pattern Matching в Java — прощай `instanceof + cast`
Раньше, чтобы проверить тип и привести его, писали вот так:
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.toLowerCase());
}{}
👎 Шумно, опасно, повторяется.
С Java 16+ можно проще и безопаснее — паттерн-матчинг для `instanceof`:
✔️ Как это работает:
if (obj instanceof String s) {
System.out.println(s.toLowerCase());
}{}
✅ Если obj
— String
, то переменная s
уже приведена к нужному типу.
Больше никаких ручных кастов.
🛠 Примеры на практике:
☑️ Проверка нескольких типов
void printInfo(Object obj) {
if (obj instanceof String s) {
System.out.println("Строка: " + s.toUpperCase());
} else if (obj instanceof Integer i) {
System.out.println("Число: " + (i * 2));
} else {
System.out.println("Что-то другое");
}
}{}
🔍 Код стал чище: без каста, без дублирования obj
.
🚀 Использование внутри switch
С Java 21 (preview) можно использовать switch
с типами:
static String format(Object obj) {
return switch (obj) {
case String s -> "Строка: " + s;
case Integer i -> "Целое: " + i;
case null -> "null";
default -> "Неизвестно";
};
}{}
➡️ Это называется Pattern Matching for switch.
🧩 Совмещение с guard'ами
if (obj instanceof String s && s.length() > 5) {
System.out.println("Длинная строка: " + s);
}{}
⚠️ s
будет доступна только если оба условия выполняются. Это безопасно.
🧪 Более сложные условия
if (!(obj instanceof String s)) return;
System.out.println("Обрабатываем строку: " + s.toLowerCase());{}
Можно комбинировать с !instanceof
, return
, continue
, break
и др.
🗣️ Запомни: Используй instanceof
с привязкой переменной — особенно в if-else
, парсерах, логике обработки событий и switch
.1545
15:21
12.06.2025
close
С этим каналом часто покупают
Отзывы канала
keyboard_arrow_down
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
5.0
1 отзыва за 6 мес.
Превосходно (100%) За последние 6 мес
m
**rketing@****.academy
на сервисе с декабря 2024
01.04.202510:44
5
Оперативное размещение
Показать еще
Новинки в тематике
Лучшие в тематике
Статистика канала
Рейтинг
21.0
Оценка отзывов
5.0
Выполнено заявок
76
Подписчики:
7.4K
Просмотры на пост:
lock_outline
ER:
11.4%
Публикаций в день:
1.0
CPV
lock_outlineВыбрано
0
каналов на сумму:0.00₽
Подписчики:
0
Просмотры:
lock_outline
Перейти в корзинуКупить за:0.00₽
Комментарий