Easy Java
Открыть в Telegram
Лучшие обучающие материалы и другие полезности для Java-разработчиков. Сотрудничество: @heywan_n1 Цены: @heywan_media Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Больше5 033
Подписчики
-624 часа
-237 дней
-7830 день
Архив постов
5 033
Ошибка: ConcurrentModificationException при итерации по списку.
При изменении ArrayList во время итерации можно получить ConcurrentModificationException.
❌ Ошибка:
import java.util.*;
public class ConcurrentModExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3, 4, 5));
for (Integer num : numbers) {
if (num % 2 == 0) {
numbers.remove(num); // ❌ ConcurrentModificationException
}
}
}
}
👍 Разбор:
✔️ ArrayList использует модификационный счётчик, который ломается при изменении коллекции во время итерации.
✔️ for-each использует Iterator, который не поддерживает удаление элементов во время итерации.
✔️ Правильный вариант 1: Использовать Iterator.remove()
Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
if (iterator.next() % 2 == 0) {
iterator.remove(); // Работает корректно
}
}
✔️ Правильный вариант 2: Использовать removeIf()
numbers.removeIf(n -> n % 2 == 0); // Удаляет без исключений
💡 Запомни:
✔️ for-each нельзя использовать для удаления элементов.
✔️ Используй Iterator.remove() или removeIf().
❓ А вы знали об этом?
📍 Теги: #java #concurrentmodification #collections #mistakes #bestpractices5 033
🟢 1. Ошибка: == vs equals() при сравнении строк
В Java строки (String) сравниваются не через ==, а с equals(), иначе возможны ошибки.
📌 Ошибка:
public class StringComparison {
public static void main(String[] args) {
String s1 = "hello";
String s2 = new String("hello");
System.out.println(s1 == s2); // ❌ false (сравнение ссылок)
System.out.println(s1.equals(s2)); // ✅ true (сравнение значений)
}
}
👍 Разбор:
✔️ == сравнивает ссылки на объекты в памяти, а не значения.
✔️ equals() сравнивает сами строки.
✔️ Правильный вариант:
if (s1.equals(s2)) {
System.out.println("Строки равны ");
}
💡 Запомни:
✔️ Используй equals() для строк.
✔️ == работает только для пулла строк (String s1 = "hello"; String s2 = "hello";).
❓ А вы знали об этом?
📍 Теги: #java #string #equals #mistakes #bestpractices5 033
👩💻 Java - Полный Курс по Java
В этом видеокурсе автор пошагово и простым языком ознакомит вас с важными концепциями языка Java. Преподаватель на практике показывает — как, что и зачем делать, прямо в редакторе кода.🔤 Ссылка на источник 🔤 ➡ Easy Java |#Видео #Курсы
5 033
🎉 Розыгрыш 10 000 звёзд Telegram! 🎉
Друзья, у нас отличные новости! Мы разыгрываем 10 000 звёзд Telegram среди подписчиков канала «Цифровая кухня». Участвуйте и получите шанс выиграть один из пяти призов!
🏆 Призовые места:
1 место: 3 000 звёзд
2 место: 2 500 звёзд
3 место: 2 000 звёзд
4 место: 1 500 звёзд
5 место: 1 000 звёзд
📋 Условия участия:
1. Подпишись на канал «Цифровая кухня»
2. Нажать кнопку "Участвую!"
⏰ Подведение итогов:
11 марта 2025 года в 18:00 на канале «Цифровая кухня» мы случайным образом выберем 5 победителей среди всех подписчиков канала. Результаты будут опубликованы там же.
Что можно делать со звёздами?
Звёзды Telegram можно использовать для покупки стикеров, подарков в чатах или перевода в другие активы. Это реальные деньги, которые сделают ваш Telegram ещё удобнее!
Не упустите шанс!
Подписывайтесь на канал «Цифровая кухня», чтобы не пропустить важные новости, полезные материалы и, конечно, результаты розыгрыша.
5 033
Recursion vs Iteration: Что выбрать?🗳
Рекурсия и итерация — два способа решения задач. Какой выбрать?
📌 Факториал: Рекурсия vs Итерация
✔️ Рекурсия:
public static int factorialRecursive(int n) {
return (n == 1) ? 1 : n * factorialRecursive(n - 1);
}
✔️ Итерация:
public static int factorialIterative(int n) {
int result = 1;
for (int i = 2; i <= n; i++) {
result *= i;
}
return result;
}
👍 Разбор:
✔️ Рекурсия удобна для разделяй и властвуй, но может вызвать StackOverflowError.
✔️ Итерация эффективнее по памяти, но иногда менее читаема.
✔️ В Java лучше избегать глубоких рекурсий из-за ограниченного стека.
💡 Запомни:
✔️ Рекурсия = удобство, но риск StackOverflowError.
✔️ Итерация = производительность и безопасность.
📍 Теги: #java #recursion #iteration #performance #bestpractices5 033
🚀 Cегодня пройдет полезный бесплатный урок «Bun – быстрый альтернативный рантайм для Node.js» от онлайн-курса Node.js Developer 05 марта 20:00 (мск). https://otus.pw/bI25/
Что будет на вебинаре?
1️⃣Разбор возможностей Bun: быстрый сервер, менеджер пакетов и тестирование.
2️⃣Сравнение Bun с Node.js: плюсы, минусы, производительность.
3️⃣Практическое применение Bun в реальных проектах.
Кому вебинар будет полезен?
- Фронтент,
- Фуллстэк,
- Бэкенд разработчикам на Node.js
- И других языках для web'а.
Что узнают участники на вебинаре?
✅ Как использовать Bun для запуска серверов и выполнения JavaScript-приложений.
✅ Как переходить с Node.js на Bun и какие сценарии использования подходят лучше всего.
⏰ Торопитесь! Успейте зарегистрироваться на бесплатный вебинар, который пройдет уже сегодня, 05 марта, в 20:00 (мск). Запись ограничена! https://otus.pw/bI25/?erid=2W5zFGrSctp
#реклама
О рекламодателе
5 033
Senior-разработчики, тимлиды и по совместительству админы GitHub, создали свои каналы по ЯП Java и Python❗️
Тут они показывают как писать код на очень крутом уровне, используя секретные фишки:
📱 Python — Реальный код, полезные советы и интересные задачи для Python-разработчика.
📱 Java — Полезные материалы по Java, которые будут интересны опытному и начинающему прогеру.
📚 Книжный python — Слив платных курсов, статьи, книги и лучшая теория по всем Python.
🖥 Библиотека Java — Сборник всех самых полезных статей и книг по Java.
🖥 Memes — Самые жизненные и смешные мемы для любого программиста.
P.S. 🔑Сделали каналы открытыми на пару дней, успейте подписаться!
5 033
🍿 Как работает сериализация в Java?
Java предоставляет разработчикам удобные инструменты для сериализации объектов. Несмотря на то, что они кажутся донельзя примитивными, их внутренняя реализация содержит много интересных моментов. В этой статье мы рассмотрим основы сериализации и некоторые нюансы, связанные с ней. И, конечно, посмотрим, как она работает изнутри.🔤 Читать статью 🔤 ➡️ Easy Java | #Статьи #Полезно
5 033
‼️ ЯИНВЕСТ — вновь доступен ‼️
Знаете ли вы про канал в котором опытный трейдер делиться своими сделками и открыто торгует на свою аудиторию?
Только за прошлый день заработано +126% ✅
💡 Почему стоит подписаться на этот канал?
⏺Заранее даём инсайды по горячим активам
⏺Проверенные стратегии и чёткие сигналы
⏺Возможность личной консультации с автором канала
⏺Только честный трейдинг – без пустых обещаний!
‼️ Ссылка активна ещё 38 минут ‼️
👉 https://t.me/+qrkGq6QWHvw3MTgy
Пора действовать! 💼
5 033
Map: Группировка данных с Collectors.groupingBy()
В Java можно группировать данные в Map, используя Collectors.groupingBy().
📌 Пример:
import java.util.*;
import java.util.stream.Collectors;
public class GroupingExample {
public static void main(String[] args) {
List<String> words = List.of("apple", "banana", "avocado", "blueberry", "cherry");
Map<Character, List<String>> groupedWords = words.stream()
.collect(Collectors.groupingBy(word -> word.charAt(0)));
System.out.println(groupedWords);
}
}
✔️ Вывод:
{a=[apple, avocado], b=[banana, blueberry], c=[cherry]}
🔹 Разбор:
✔️ groupingBy() — группирует данные по ключу.
✔️ word.charAt(0) — используем первую букву слова как ключ.
✔️ В результате получается Map<Character, List<String>>.
💡 Запомни:
✔️ groupingBy() удобно использовать для агрегации данных.
✔️ Можно комбинировать с mapping() для преобразования значений.
📍 Теги: #java #stream #collectors #groupingBy #collections5 033
🟢 Optional: Избегаем NullPointerException
В Java класс Optional помогает избежать NullPointerException и делает код читаемым и безопасным.
📌 Пример:
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
Optional<String> name = getName();
// Используем ifPresentOrElse
name.ifPresentOrElse(
n -> System.out.println("Имя: " + n),
() -> System.out.println("Имя отсутствует")
);
}
public static Optional<String> getName() {
return Math.random() > 0.5 ? Optional.of("Алиса") : Optional.empty();
}
}
👍 Разбор:
✔️ Optional.of(value) — создаёт Optional, если значение не null.
✔️ Optional.empty() — создаёт пустой Optional.
✔️ ifPresentOrElse() — удобный способ обработать Optional.
💡 Запомни:
✔️ Optional помогает избежать NullPointerException.
✔️Используй ifPresentOrElse() вместо if (obj != null).
📍 Теги: #java #optional #null #bestpractices5 033
Карьерная лестница до Сеньора в айти куда проще, чем кажется на самом деле
Одно из простейших направлений сейчас - Java. И чтобы стать сеньором, достаточно лишь регулярно читать канал Easy Java.
В нём каждый день опытный разработчик бесплатно делится полезными материалами. Учит оптимизировать код, проходить собеседования и работать с закрытыми глазами с помощью плагинов.
Пора обрести профессию с высокой зарплатой: @EasyJava
5 033
☕️ Барьеры и модели памяти
В этой статье разберём, какие проблемы могут возникнуть при переносе сервисов между архитектурами x86/64 и ARM из-за различий в моделях памяти. Узнаем, как барьеры памяти помогают управлять многопоточностью и какие подводные камни могут ожидать разработчиков. Автор подробно объясняет, что такое модели памяти и барьеры памяти, делится личным опытом и предлагает визуально понятные материалы для глубокого понимания темы.⛓ Ссылка на статью ➡️ Easy Java | #Статья
5 033
👨💻 Comparator: Поиск максимального и минимального значения
В Java Comparator позволяет удобно находить минимальные и максимальные значения в коллекциях.
📌 Пример:
import java.util.List;
import java.util.Comparator;
public class ComparatorMinMaxExample {
public static void main(String[] args) {
List<Integer> numbers = List.of(10, 25, 3, 47, 8);
int min = numbers.stream().min(Comparator.naturalOrder()).orElseThrow();
int max = numbers.stream().max(Comparator.naturalOrder()).orElseThrow();
System.out.println("Минимум: " + min); // Вывод: 3
System.out.println("Максимум: " + max); // Вывод: 47
}
}
👍 Разбор:
✔️ Comparator.naturalOrder() — встроенный компаратор для сортировки по возрастанию.
✔️ min() и max() используют этот компаратор для поиска крайних значений.
✔️ orElseThrow() — выбрасывает исключение, если коллекция пустая.
💡 Запомни:
✔️ Comparator.naturalOrder() — удобный способ поиска min/max.
✔️ Можно использовать Comparator.reverseOrder() для обратной сортировки.
📍 Теги: #java #comparator #min #max #collections5 033
🟢 Lambda: Поиск максимального и минимального значения
В лямбда-выражениях удобно находить минимальное и максимальное значения с помощью Comparator.
📌 Пример:
import java.util.List;
import java.util.Comparator;
public class LambdaMinMaxExample {
public static void main(String[] args) {
List<Integer> numbers = List.of(10, 25, 3, 47, 8);
int min = numbers.stream().min((a, b) -> a - b).orElseThrow();
int max = numbers.stream().max((a, b) -> a - b).orElseThrow();
System.out.println("Минимум: " + min); // Вывод: 3
System.out.println("Максимум: " + max); // Вывод: 47
}
}
👍 Разбор:
✔️ min((a, b) -> a - b) — лямбда-компаратор для поиска минимального значения.
✔️ max((a, b) -> a - b) — аналогично, но для максимального.
✔️ orElseThrow() — выбрасывает исключение, если список пуст.
💡 Запомни:
✔️ Лямбда-выражения позволяют сокращать код и упрощать сравнения.
✔️ Можно заменить (a, b) -> a - b на Integer::compare.
📍 Теги: #java #lambda #comparator #min #max5 033
🟢 Stream API: Группировка данных в Java
Stream API позволяет легко группировать элементы коллекций с помощью Collectors.groupingBy().
📌 Пример:
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class StreamGroupingExample {
public static void main(String[] args) {
List<String> names = List.of("Анна", "Иван", "Петр", "Ольга", "Алексей", "Игорь");
// Группируем имена по первой букве
Map<Character, List<String>> groupedNames = names.stream()
.collect(Collectors.groupingBy(name -> name.charAt(0)));
System.out.println(groupedNames);
// Вывод: {А=[Анна, Алексей], И=[Иван, Игорь], П=[Петр], О=[Ольга]}
}
}
👍 Разбор:
✔️ Collectors.groupingBy() — группирует элементы по ключу.
✔️ name.charAt(0) — используем первую букву имени как ключ.
✔️ Возвращается Map<Character, List<String>>, где ключ — первая буква, а значение — список имен.
💡 Запомни:
✔️ groupingBy() — мощный инструмент для группировки данных.
✔️ Можно комбинировать с mapping(), counting() и другими коллекторами.
📍 Теги: #java #streamAPI #collectors #groupingBy #functionalprogramming5 033
Секрет джунов с оффером в Альфа-Банк
Хватит. Нет никакого магического секрета. Только мощный стек, гибкое мышление и прокачанные скилы.
Получить свой билет в крупную IT-компанию можно быстрее, если изучить эти бесплатные мануалы от FAANG School. И база постоянно обновляется.
Они уже помогли 600+ ученикам устроиться в Сбер, Яндекс, Вконтакте:
– Пошаговая RoadMap по Java
– Redis - 5 улучшений для твоего пет-проекта
– Мануал по Docker. Основные команды и концепции
– Микросервисы. Вопросы с собеседований
– Шпаргалка с горячими клавишами JetBrains IDE. Ускоришь работу в 10 раз
– Desk setup. Подборка аксессуаров для комфортной работы
– Шпаргалка по Kafka
– Шпаргалка по Spring с разбором паттерна Наблюдатель
– Инструкция по работе с Git
– Подробный гайд, как найти работу в IT без опыта
– Подборка платформ с вакансиями для java-разработчиков
- Шпаргалка по основным командам SQL
Переходи по ссылке - это твой шаг к моменту, когда амбиции превратятся в реальность. Доступ к библиотек открыт только на 24 часа!
