Java Portal | Программирование
11.6K subscribers
1.57K photos
118 videos
45 files
1.63K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Используйте Comparator.nullsFirst() или Comparator.nullsLast(), если ключи сортировки могут быть null.

✅ comparing(User::getName) выбросит NullPointerException, если getName() вернёт null.
✅ Оберните компаратор в nullsFirst() или nullsLast(), чтобы явно задать порядок для null.
✅ Для сортировки по нескольким полям добавляйте thenComparing().

#Java #Comparator

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2
💡 Используй Instant.truncatedTo(...), когда нужно сравнивать время с точностью до дня, часа или минуты.

✅ Instant.equals() сравнивает значение целиком, поэтому разница даже в наносекундах даст false
✅ truncateTo(ChronoUnit.DAYS) отбрасывает более мелкие единицы времени
✅ Удобно для проверок вроде «тот же день» или «тот же час»

#Java #Time

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Используйте Stream.peek() только для отладки, а не для реальной логики.

✅ peek() выполняется как побочный эффект, поэтому его вызов легко не заметить или вообще потерять при выполнении Stream pipeline.
✅ Для намеренной обработки данных лучше использовать map() или forEach().

#Java #Streams

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Используйте Files.isSameFile(path1, path2), чтобы проверить, указывают ли два пути на один и тот же файл. Метод также учитывает симлинки.

✅ Он проверяет, ссылаются ли два объекта Path на один и тот же реальный файл в файловой системе.

#Java #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Используйте ReentrantReadWriteLock, когда операций чтения много, а записи происходят редко.

✅ Несколько потоков могут одновременно удерживать блокировку чтения
✅ Для записи требуется эксклюзивная блокировка
✅ При преобладании чтения пропускная способность выше, чем с одной эксклюзивной блокировкой

#Java #Concurrency

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Используйте Files.isSameFile(a, b), чтобы проверить, указывают ли два пути на один и тот же файл.

✅ Path.equals сравнивает только текстовое представление пути.
✅ isSameFile проверяет реальный файл и учитывает симлинки.

#Java #Files

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Используйте Collectors.summarizingInt(), чтобы за один проход получить количество элементов, сумму, минимум, максимум и среднее значение.

Так не придётся несколько раз прогонять один и тот же поток данных.

Метод возвращает объект IntSummaryStatistics.

Для long и double есть аналогичные методы: summarizingLong() и summarizingDouble().

#Java #Streams

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥9👍1👀1
Сопоставление с образцом для instanceof: переменную можно объявить прямо в проверке.

Старый подход: сначала instanceof, затем отдельное приведение типа.

Новый подход: if (obj instanceof Dog d) — переменная d сразу готова к использованию.

При этом d существует только там, где условие проверки истинно.

#Java #PatternMatching

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤1
Java: поверхностное клонирование копирует только сам объект, а вложенные объекты остаются общими.

super.clone() сам по себе создаёт поверхностную копию.

Глубокое клонирование дополнительно копирует и вложенные поля.

Если ссылки остаются общими, изменение вложенного объекта в одной копии будет видно и в другой.

#Java #SoftwareEngineering

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
💡 Java — не стоит считать, что десятичным разделителем всегда будет точка.

✅ Шаблоны вроде #,###.## всё равно используют символы, зависящие от локали.

✅ Нужные разделители можно задать через DecimalFormatSymbols(locale).

✅ В Италии число будет выглядеть как 1.234,56, а в США — 1,234.56.

#Java #JavaDev

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
💡 Java: если переопределяете equals(), всегда переопределяйте и hashCode().

✅ Равные объекты должны иметь одинаковый hash code
✅ Иначе HashSet и HashMap могут не находить совпадения

#Java #OOP

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4
Java Stream API tip: группируйте объекты по нужному полю без написания циклов вручную.

Удобно для отчётов, dashboards и aggregation logic.

#Java #JavaTips #StreamAPI #BackendDevelopment

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Java: рефакторьте legacy code небольшими шагами — тесты должны быть вашей страховкой.

✅ Сначала добавьте тест, который фиксирует текущее поведение
✅ Измените что-то одно, запустите тесты и повторите
✅ Избегайте масштабных переписываний кода без test coverage

#Java #LegacyCode

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
Java tip: isBlank() > isEmpty()

Более чистый код с меньшим количеством boilerplate.

#java #coding

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔6❤3🤣1
💡 Java: Checked vs Unchecked Exceptions

✅ Checked (IOException): compiler требует обработать exception через try/catch или объявить его через throws
✅ Unchecked (RuntimeException): обработка на этапе компиляции не требуется
✅ Используйте checked exceptions только для ошибок, после которых возможно восстановление

#Java #ErrorHandling

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
💡 Java: не раскрывайте изменяемое внутреннее состояние — возвращайте DTO или копии

✅ Getters, возвращающие изменяемые коллекции напрямую, могут быть опасны
✅ Вызывающий код сможет изменить внутреннее состояние объекта без вашего контроля
✅ Предпочитайте DTO, List.copyOf() или unmodifiable views

#Java #Encapsulation

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
💡 Java: не используйте Thread.sleep() для ожидания выполнения задачи — используйте синхронизацию или scheduler.

❌ Thread.sleep() — это всего лишь предположение: выполнение может возобновиться слишком рано или слишком поздно
✅ Для координации используйте wait() / notify() или CountDownLatch
✅ Для повторяющихся задач используйте ScheduledExecutorService

#Java #Concurrency

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
💡 Java: форматируйте код одинаково каждый раз

✅ Выберите единый code style и придерживайтесь его
✅ Автоматизируйте форматирование с помощью Spotless или Checkstyle в build
✅ Используйте format on save / CI, чтобы стиль кода не зависел от того, кто его написал

#Java #CleanCode

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
💡 Java/Spring: отдавайте предпочтение constructor injection вместо @Autowired для полей.

✅ Field injection скрывает обязательные dependencies
✅ Constructor injection делает зависимости явными
✅ Проще писать тесты: можно передать mocks напрямую, без запуска Spring context

#Java #SpringBoot

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Java: используйте Deque вместо Stack для работы по принципу LIFO («последним пришёл — первым вышел»).

Stack — устаревший класс, который наследуется от Vector и синхронизирует каждый вызов.

Deque предоставляет те же методы push, pop и peek.
Используйте ArrayDeque: он быстрее и рекомендуется начиная с Java 6.

#Java #Collections

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1