Java Learning – Telegram
Java Learning
18.3K subscribers
1.62K photos
2 videos
3 files
1K links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://news.1rj.ru/str/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
✔️ Использовании Optional для избежания NullPointerException

В Java часто приходится сталкиваться с проблемой, когда метод возвращает null, что может привести к NullPointerException. Чтобы избежать таких ситуаций, можно использовать класс Optional.

👀 Рассмотрим пример, как использовать Optional для безопасного получения значения из метода, который может вернуть null.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
🔗 Объединение строк с помощью String.join

Часто возникает необходимость объединять несколько строк в одну, используя определенный разделитель.

🗣️ До Java 8 это обычно делалось с помощью цикла и объекта StringBuilder. С появлением метода String.join, эта задача стала намного проще и лаконичнее.

Использование метода String.join значительно упрощает задачу объединения строк с разделителем, делая код более читаемым и сокращая количество кода, которое нужно написать и поддерживать.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1
✔️ Как сделать ваш код чище с Records

Records — это новый тип классов в Java, который значительно упрощает создание классов, предназначенных для хранения неизменяемых данных.

🗣️ Они автоматически предоставляют стандартные методы, такие как equals(), hashCode() и toString(), что делает код более чистым и менее многословным.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😁1😢1
➡️ Sealed Classes в Java

Sealed classes позволяют разработчикам ограничивать, какие классы могут наследоваться от конкретного класса или реализовывать интерфейс.

🗣️ Это полезно для создания более предсказуемой и контролируемой иерархии классов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🔥 Pattern Matching для instanceof

В Java 14 был представлен Pattern Matching для оператора instanceof. Эта возможность упрощает и делает более читабельным код, который проверяет типы объектов и затем приводит их к этим типам.

✔️ Используйте эту фишку для написания более чистого и читаемого кода, избегая лишних явных приведений типов

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🎄1
🪄 Магия сопоставления шаблонов: Switch Expressions

ℹ️ Switch Expressions позволяет писать более компактный и выразительный код при использовании оператора switch.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤‍🔥1
➡️ Мощь статических методов: Использование методов интерфейсов

✔️ В Java 8 была введена возможность определения статических методов в интерфейсах, что открыло новые возможности для создания удобных и мощных утилитарных функций прямо в интерфейсах.

🗣В интерфейсе ListUtils определен статический метод max, который находит максимальный элемент в коллекции.

🗣В методе main мы вызываем статический метод max из интерфейса ListUtils, передавая ему список чисел.

🗣Мы выводим найденное максимальное число на экран.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
✔️ Использование Collectors.teeing для объединения потоков

Java 12 представила новый метод Collectors.teeing, который позволяет объединить результаты двух различных коллекторов в один итоговый результат.

🗣️ Эта возможность значительно упрощает обработку сложных потоков данных.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤‍🔥2🔥2
➡️ Использование Optional для работы с потенциально null значениями

Использование Optional позволяет более безопасно работать с потенциально null значениями в Java.

🗣️ Этот подход помогает предотвратить распространенные ошибки, такие как NullPointerException, и делает код более читаемым и надежным.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤‍🔥1
➡️ Фабричный метод коллекции

✔️ Коллекции — наиболее часто используемая функция в нашем ежедневном программировании. Они используются в качестве контейнера, в котором мы храним объекты и передаем их дальше.

Коллекции также используются для сортировки, поиска и перебора объектов, что упрощает жизнь программиста. Он предоставляет несколько базовых интерфейсов, таких как List, Set, Map и т. д., а также множество реализаций.

Традиционный способ создания коллекций и карт может показаться многим разработчикам многословным.

👀 Вот почему в Java 9 появилось несколько очень кратких фабричных методов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤‍🔥1
Использование LocalDate и DateTimeFormatter для работы с датами

LocalDate и DateTimeFormatter предоставляют удобные и безопасные методы для работы с датами в Java.

🗣️ Этот подход упрощает задачи форматирования и парсинга дат, что делает код более читаемым и менее подверженным ошибкам.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
➡️ Как объединить два списка в Java?

Этот код демонстрирует, как объединить два списка list1 и list2 в Java, создав новый список mergedList, который содержит все элементы из обоих исходных списков. В результате выполнения кода будет напечатан объединенный список.

🗣️ Этот подход часто используется на практике при работе с коллекциями в Java.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Парадокс Comparator’а

Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так:

public class ByScoreComparator implements Comparator<User> {

@Override
public int compare(User u1, User u2) {
return (int) signum(u2.getAge() - u1.getAge());
}
}


➡️ Главная проблема — понять, от чего отнимать, чтобы порядок был правильным. Правильный ответ с первого раза получается редко, и часто мы замечаем ошибку уже после запуска кода.

Теперь это не нужно. Можно использовать ссылки на методы:

Comparator<User> comparator = Comparator
.comparingDouble(User::getAge)
.thenComparing(User::getName);
List<User> hList = ...;
hList.sort(comparator);


🗣️ Такой подход упрощает создание компараторов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4❤‍🔥2
Как правильно использовать утилитарные классы

Утилитарные классы предназначены не для создания объектов, а для предоставления статических методов для выполнения общих функций. Если вы пишете слишком много таких классов, пересмотрите свой подход к проектированию кода.

Однако иногда они необходимы, например, для реализации внутренних предметно-ориентированных языков (DSL) в Java. В таких случаях часто отступают от принципов ООП, чтобы сделать синтаксис короче.

➡️ Если вам все-таки нужно создать утилитарный класс, придерживайтесь следующих рекомендаций:

• Сделайте конструктор приватным, чтобы класс нельзя было создать.
• Сделайте класс final, чтобы его нельзя было наследовать.
• Объединяйте методы в утилитарные классы по функциональности. Избегайте общих названий, таких как MvcUtils или CommonUtils.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤‍🔥2
⚙️ Оптимизация сборщика мусора с помощью -XX:+UseG1GC

Java предоставляет множество возможностей для оптимизации производительности приложений.

✔️ Одной из таких возможностей является использование современного сборщика мусора G1 (Garbage First), который улучшает работу приложений с большим объемом данных и снижает задержки.

➡️ Чтобы включить использование G1GC, необходимо добавить флаг -XX:+UseG1GC при запуске Java-приложения:

java -XX:+UseG1GC G1GCExample


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
👀 Случайные целочисленные числа

Теперь более трудное задание. Не читайте решение. Посмотрите сможете ли вы найти
ответ самостоятельно. Когда я запущу следующую программу:

for (int i = 0; i < 10; i++) {
System.out.println((Integer) i);
}


Иногда я получаю следующий вывод:

92
221
45
48
236
183
39
193
33
84


➡️ Но как такое вообще возможно? Ответ в кроется в переопределении JDK кеша Integer через рефлексию, и затем в использовании auto-boxing и auto-unboxing.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😱3❤‍🔥2
👀 Datafaker

Datafaker создает фиктивные данные для ваших программ JVM за считанные минуты, используя широкий спектр из более чем 100 поставщиков данных.

🗣️ Это может быть очень полезно при генерации тестовых данных для заполнения базы данных, генерации данных для стресс‑теста или анонимизации данных из производственных сервисов. Давайте включим его в наши зависимости.

🔗 Ссылочка на доку

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥5❤‍🔥1
➡️ Обработка CloneNotSupportedException и возврат экземпляра подкласса

Несмотря на критику функции клонирования объектов в Java, если вам нужно реализовать метод clone(), вот несколько лучших практик для упрощения задачи:

public Course clone() {
Course c = null;
try {
c = (Course)super.clone();
} catch (CloneNotSupportedException e) {} // Не произойдет

return c;
}


🗣️ Этот код использует тот факт, что метод clone() не вызовет CloneNotSupportedException, если класс реализует интерфейс Cloneable. Возврат подкласса называется ковариантным переопределением методов и доступен с Java 5, что позволяет избежать приведения типа на стороне клиента:

Course javaBeginners = new Course("Java", 100, 10);
Course clone = javaBeginners.clone();


Ранее, например, с классом Date, нужно было явно приводить результат метода clone():

Date d = new Date();
Date clone = (Date) d.clone();


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤‍🔥1
➡️ Использование Iterator для перебора List

В Java есть несколько способов перебрать список: цикл for с индексом, расширенный for и Iterator. Раньше я использовал цикл for с методом get(), как показано ниже:

for (int i = 0; i < list.size(); i++) {
String name = list.get(i);
}


🗣️ Этот метод работает для ArrayList, но если список — это LinkedList или другая реализация без поддержки случайного доступа, время выполнения увеличится до O(N^2), потому что get() для LinkedList имеет O(n) сложность.

Кроме того, при использовании циклов может возникнуть ошибка в многопоточном режиме, например, при работе с CopyOnWriteArrayList, когда один поток изменяет список, а другой пытается получить доступ к элементам, что может привести к IndexOutOfBoundsException.


✔️ Лучше использовать Iterator, который является стандартным способом перебора списка:

Iterator<String> itr = list.iterator();

while (itr.hasNext()) {
String name = itr.next();
}


Это безопаснее и предотвращает непредсказуемое поведение.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
➡️ Maven

Maven — один из трёх самых популярных инструментов для сборки проектов на Java. Он отвечает за компиляцию, создание jar-файлов (Java-архивов), создание дистрибутива программы, генерацию документации.

🗣️ Maven — просто отличная штука, хоть поначалу и не очень понятная. Если вы никогда не использовали Maven раньше, вы многое потеряли.

🔗 Ссылочка на доку

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤‍🔥1
⚙️ Параллелизм в Java 8

В Java 8 было внесено несколько крупных изменений, улучшивших API параллелизма, включая метод newWorkStealingPool().

🗣️ Этот метод создает пул потоков, использующий алгоритм воровства работы, который может использовать доступные процессоры на желаемом уровне параллелизма.

➡️ Другие улучшения в API параллелизма включают:

Новые методы для ConcurrentHashMap: forEach(), forEachEntry(), forEachValue(), reduce(), merge() и search().
CompletableFuture может явно устанавливать свое значение и статус.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😢2