en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

Библиотека Java разработчика

Библиотека Java разработчика

Open in Telegram

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Show more
9 988
Subscribers
+124 hours
-157 days
-5730 days
Posts Archive
Инновации, цифровые технологии и собственное IT-коммьюнити — все это про Газпромбанк! Эксперты банка регулярно выступают с кл
Инновации, цифровые технологии и собственное IT-коммьюнити — все это про Газпромбанк! Эксперты банка регулярно выступают с классными темами. На международной Java-конференции JPoint 2022 разработчики рассказали много интересного: как писать хороший код, где искать людей для трансформации процессов и как правильно программировать контекст времени в Java. Если ты хочешь развиваться профессионально и кодишь на Java, приглашаем стать частью команды Газпромбанка, все вакансии тут > https://vk.cc/ccWssJ

Как реализовать метод equals? Сначала нужно решить, действительно ли вам нужно переопределять equals(). Реализация по умолчан
Как реализовать метод equals? Сначала нужно решить, действительно ли вам нужно переопределять equals(). Реализация по умолчанию делает объект равным только самому себе (сравнение на идентичность). Это имеет смысл, если у вашего класса не бывает отдельных, но логически одинаковых экземпляров. Если два экземпляра всё-таки могут быть равны, equals() нужно переопределять. Реализация должна соблюдать контракт: это отношение эквивалентности (рефлексивность, транзитивность, симметричность), ни один объект не равен null. Рефлексивность. первым делом проверим, не идентичен ли переданный объект текущему. Если да – сразу вернем true. Неравенство null. Если аргумент null – сразу вернем false. Симметричность. Если мы допускаем наследование и расширение метода equals(), в наследнике может появиться дополнительная логика, которая сделает !other.equals(this) при this.equals(other). Проще всего избежать этого, добавив сравнение типов. Если типы не равны – сразу вернем false. Почему не надо использовать instanceof. Транзитивность. Оператор == обладает свойствами транзитивности и симметричности. Далее мы сравниваем на равенство все примитивные свойства. Для ссылочных типов этими характеристиками по контракту обладает equals – для сравнения ссылочных типов пользуемся им. Речь здесь идет о логических свойствах. Фактически одно логическое свойство может быть представлено несколькими полями класса, или же может вычисляться на лету. Некоторые поля служат для внутренних технических нужд, и не имеют отношения к логическому состоянию. Такие поля обычно исключают из сравнения. #Классы 👉@BookJava

⁉️Хотите быстро освоить Java, но не знаете, с чего начать? 🔥Подключайтесь к отрытому уроку 8 августа в 20:00 мск. Тема занят
⁉️Хотите быстро освоить Java, но не знаете, с чего начать? 🔥Подключайтесь к отрытому уроку 8 августа в 20:00 мск. Тема занятия: «Структура программы на Java. Примитивные типы». На вебинаре познакомимся с основными этапами создания простейшей программы на Java, поймем принципы работы компилятора и виртуальной машины, а также разберемся с class-файлами. Также на уроке изучим примитивные типы данных, константы и enum. 📚Урок пройдет в рамках буткемпа «Java developer» для всех, кто хочет с нуля и за короткое время освоить профессию разработчика Junior+ уровня. 🗣Преподаватель: Непомнящий Евгений, сертифицированный Java-разработчик. 📌Регистрируйтесь на урок: https://otus.pw/PrHn/

Как инициализировать иммутабельный класс? Если прочитать определение immutable-объекта внимательно, момент его создания – это единственный этап в жизненном цикле, когда объект может меняться. Действительно, как иначе установить это неизменяемое состояние. Отсюда, при неправильной реализации, вытекают некоторые риски дальнейшей неизменяемости. Первое, самое очевидное правило: копируйте поля ссылочных типов. Когда пользователь передал в конструктор изменяемый объект, возможно он все еще владеет ссылкой на него. Тогда, пользуясь этой ссылкой, пользователь может менять поле вашего иммутабельного объекта позднее. Создав копию объекта-параметра перед присвоением в поле, вы получите эксклюзивную ссылку, недоступную извне. Вторая проблема, с которой вы гораздо менее вероятно столкнетесь, но о которой нужно знать: без должной синхронизации в многопоточной среде конструктор может получить ссылку на не до конца сконструированный объект. Для поддержки создания объектов в многопоточной среде нужно обеспечить создание его полей happens-before. Проблема аналогична double-checked блокировке без ключевого слова volatile – детали можно почитать здесь. Что касается удобства создания immutable объектов. Если класс состоит из всего пары полей – дополнительные действия скорее всего не нужны, хватит обычного конструктора. Однако, когда полей много, это становится проблемой. В Java, в отличие от таких языков как например TypeScript или Kotlin, нельзя указывать имена передаваемых параметров. Обычно можно воспользоваться сеттерами, но в неизменяемом классе их нет. Похожая проблема возникает, когда процесс создания объекта не может быть атомарным, потому что он разделен между несколькими сущностями. Разные компоненты предоставляют разные поля, приходится копить их во временных переменных, прежде чем вызвать конструктор. На помощь приходят порождающие паттерны. Самый распространенный подход – builder (паттерн Строитель). Для иммутабельного типа Foo создается дополнительный изменяемый класс FooBuilder. В билдере есть сеттеры для каждого поля. Эти сеттеры обычно возвращают this, что позволяет вызывать их в цепочке. Цепочка заканчивается методом build(), который уже создает иммутабельный Foo. Каждый сеттер выполняет роль именованного параметра. Сам билдер, как обычный объект, можно передавать от компонента к компоненту, делегируя им части инициализации. Использование этого паттерна логически разделяет существование объекта типа Foo на два этапа – создание и использование. #Классы 👉@BookJava

Ⓘ Вас упомянул владелец канала. Подборка каналов для IT специалистов 🎯 https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С https://t.me/kotlin_lib Подборки полезного материала по Kotlin https://t.me/nodejs_lib Подборки по Node js и все что с ним связано https://t.me/React_lib Подборки по React js и все что с ним связано https://t.me/ruby_lib Библиотека Ruby программиста Программирование C++📌 https://t.me/cpp_lib Библиотека C/C++ разработчика https://t.me/cpp_knigi Книги для программистов C/C++ Программирование Python 📌 https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍 https://t.me/BookPython Библиотека Python разработчика https://t.me/python_real Python подборки на русском и английском https://t.me/python_360 Книги по Python Rus Java разработка 📌 https://t.me/BookJava Библиотека Java разработчика https://t.me/java_360 Книги по Java Rus GitHub Сообщество 📌 https://t.me/Githublib Интересное из GitHub CodePen 📌 https://t.me/codepen_1 Сообщество пользователей CodePen Базы данных (Data Base) 📌 https://t.me/database_info Все про базы данных Мобильная разработка: iOS, Android 📌 https://t.me/developer_mobila Мобильная разработка Фронтенд разработка 📌 https://t.me/frontend_1 Подборки для frontend разработчиков Разработка игр 📌 https://t.me/game_devv Все о разработке игр Вакансии 📌 https://t.me/sysadmin_rabota Системный Администратор https://t.me/progjob Вакансии в IT Чат программистов📌 https://t.me/developers_ru Библиотеки 📌 https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги по программированию https://t.me/proglb Библиотека программиста https://t.me/bfbook Книги для программистов БигДата, машинное обучение 📌 https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning Программирование 📌 https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций https://t.me/coddy_academy Полезные советы по программированию QA, тестирование 📌 https://t.me/testlab_qa Библиотека тестировщика Шутки программистов 📌 https://t.me/itumor Шутки программистов Защита, взлом, безопасность 📌 https://t.me/thehaking Канал о кибербезопасности Книги, статьи для дизайнеров 📌 https://t.me/ux_web Статьи, книги для дизайнеров https://t.me/arhitekturamira World Architecture Системное администрирование 📌 https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало) https://t.me/sysadminof Книги для админов, полезные материалы https://t.me/i_odmin Все для системного администратора https://t.me/i_odmin_book Библиотека Системного Администратора https://t.me/i_odmin_chat Чат системных администраторов https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др. Английский 📌 https://t.me/UchuEnglish Английский с нуля Математика 📌 https://t.me/Pomatematike Канал по математике Арбитраж трафика 📌 https://t.me/partnerochkin CPA и арбитраж трафика Крипта 📌 https://t.me/bitkoinoff Новости криптовалют Метавселенная, GameFi, Crypto 📌 https://t.me/metaverse360 DeepFake 📌 https://t.me/deepfakenow Публикуем deepfake видео Мир технологий 📌 https://t.me/mir_teh Видео из мира технологий Excel лайфхак📌 https://t.me/Excel_lifehack

Learning Java: An Introduction to Real-World Programming with Java Авторы: Marc Loy, Patrick Niemeyer, Daniel Leuck (2020) Если вы новичок в Java, эта книга поможет вам изучить языковые фичи и API-интерфейсы Java 11. Авторы, используя убедительные и реалистичные примеры, ознакомят вас с основами Java, включая библиотеки классов, методы программирования и идиомы, с целью создания реальных приложений. Во время чтения книги вы: ✔️Начнете разрабатывать на Java, использовать компилятор, интерпретатор и другие инструменты; ✔️Изучите встроенные средства создания потоков и пакет параллелизма; ✔️Изучите обработку текста и мощный API регулярных выражений; ✔️Научитесь писать сложные веб-приложения и сервисы. 👉@BookJava

⚡️ Знаете ли вы, что в телеграм есть канал, на котором публикуются анонсы бесплатных онлайн-мероприятий по разработке — @ITMe
⚡️ Знаете ли вы, что в телеграм есть канал, на котором публикуются анонсы бесплатных онлайн-мероприятий по разработке — @ITMeeting? Здесь вы найдете митапы и конференции на любой вкус - backend, frontend, QA, DevOps, AI, ML, BI и многое другое! Подписывайтесь на канал @ITMeeting, чтобы не пропустить интересные мероприятия по своей специальности!

Как написать иммутабельный класс? Immutable (неизменяемый) класс – это класс, состояние экземпляров которого невозможно изменить после создания. С иммутабельным классом всегда легче работать. Его состояние не поменяется, значит обращаться к нему в многопоточной среде можно без дополнительной синхронизации. Функции, зависящие только от состояния экземпляра будут возвращать один и тот же результат от вызова к вызову – это облегчает например реализацию hashCode(). Также вместо нескольких одинаковых экземпляров можно использовать один закэшированный объект, экономя память (паттерн Приспособленец). Шаги, которые необходимо предпринять, чтобы класс стал immutable: 1. Запретите расширение класса – либо объявите его final, либо закройте доступ наследникам ко всем способам мутации, перечисленным в следующих пунктах; 2. Сделайте все поля финальными; 3. Не выставляйте наружу методов-мутаторов, которые меняют состояние; 4. Не отдавайте наружу поля ссылочного изменяемого типа (объекты классов, массивы) – если объект под ссылкой не иммутабельный, должна возвращаться его глубокая копия (defensive copy); 5. Создавайте объект правильно (подробнее в следующем посте). Если вам нужны преимущества иммутабельного объекта, но также нужно иногда изменять его, подойдет подход copy on write: каждый метод-мутатор должен мутировать и возвращать не сам объект, а только что созданную его копию. Оригинал всё так же остается неизменным. #Классы 👉@BookJava

Joker от JUG Ru Group возвращается! Конференция для опытных Java‑разработчиков пройдет уже в ноябре. Вы можете стать ее спике
Joker от JUG Ru Group возвращается! Конференция для опытных Java‑разработчиков пройдет уже в ноябре. Вы можете стать ее спикером. Если у вас есть интересные кейсы или вы хотите поделиться опытом решения нетривиальных задач — подавайте заявку на участие. Вы подтвердите свою экспертность, познакомитесь с крутыми специалистами и получите обратную связь от участников. Программный комитет поможет с подготовкой к выступлению — назначит персонального куратора, проведет ревью материала и организует репетиции. На сайте вы найдёте список тем, с которыми можно выступить. Если хотите выступить с другой темой, присылайте свои предложения — их обязательно рассмотрят. А если хотите просто поучаствовать в Joker 2022 — билеты уже на сайте.

Можно ли поймать Error? Технически, Error как и любой другой Throwable можно поймать в блок catch. Такой код абсолютно валидный и скомпилируется без проблем. На практике, согласно спецификации, значение исключения типа Error – необрабатываемая ошибка, ловить которую нет смысла. Более того, выброс исключения подтипа VirtualMachineError означает, что JVM находится в сломанном состоянии. Дальнейшая работа непредсказуема: OutOfMemoryError приводит к невозможности создания новых объектов, StackOverflowError теряет фреймы стека вызова, и так далее. Так как ловить Error не нужно, объявление её в секции throws сигнатуры метода необязательно. Как и RuntimeException, Error – разновидность unchecked exception. #Язык #JVM 👉@BookJava

Как скопировать массив? Object.clone() и System.arraycopy(). Нативные способы копирования, самые быстрые из возможных. Унаследованный от базового класса clone() копирует весь массив без лишних аргументов. arraycopy(), наоборот, максимально гибкий – позволяет копировать часть массива и указывать массив, в который копировать. Arrays.copyOf(), Arrays.copyOfRange() и все их перегрузки. Утилитарные методы, которые дают более специализированные способы копирования. Внутри все используют System.arraycopy(). Копирование через стрим. Arrays.stream(sourceArray).toArray(). Удобно когда нужно встроить дополнительные промежуточные операции. Сторонними библиотеками. Обычно обеспечивают дополнительные удобства, такие как проверка корректности параметров, приведения типов, и прочие. Пример – класс SerializationUtils из Apache Commons. Все перечисленные способы создают поверхностную копию – оба массива в итоге ссылаются на одни и те же объекты. Лучший способ создать глубокую копию – реализовать ее вручную. Сначала оператором new создается пустой массив нужного размера, затем в цикле заполняется копиями элементов. Stream API здесь может дать удобный интерфейс реализации, и оптимизировать копирование с помощью многопоточности. Самый быстрый, но ужасный по эффективности способ глубокого копирования массива без реализации копирования отдельных элементов – сериализация+десериализация. Сложно придумать оправдание такому плохому способу для продакшна, но этот метод вполне подходит для реализации быстрого прототипа, или для тестового кода. #Язык 👉@BookJava

Цены на обучение в вузах и на курсах растут, работодатели не хотят брать выпускников без опыта работы и непонятно, с какой ст
Цены на обучение в вузах и на курсах растут, работодатели не хотят брать выпускников без опыта работы и непонятно, с какой стороны подступиться, чтобы наконец войти в IT и начать нормально зарабатывать. Мы предлагаем тебе решение — обучение Java-разработке в Kata Academy с оплатой после трудоустройства. Это не пустые обещания и сейчас мы расскажем тебе, почему: • Kata работает по модели ISA — это взаимовыгодный вариант сотрудничества между школой и студентом, когда оплата за обучение производится только после получения работы в виде определенного процента с зарплаты. • Мы гарантируем тебе минимальную зарплату от 100 000₽ — наши выпускники получают оферы с зп на 30-40% выше ожидаемой. • В договоре закреплено условие: если ты не найдешь работу, обучение за наш счет. Мы считаем это честной сделкой. • В наших интересах, чтобы ты получил крутой офер и рос в карьерном плане, поэтому в течение двух лет после выпуска ты будешь получать карьерную поддержку от Kata. Скорее попробуй свои силы — выполняй тестовое задание по Java и приходи к нам учиться, чтобы уже через 8 месяцев стать миддловым разрабом в IT!

Что означает ArrayStoreException? Это исключение значит, что программа попыталась сохранить в массив значение неправильного типа. Такая попытка становится возможно из-за ковариантности массивов. Ковариантность позволяет работать с массивом по типу массива родителей. Например, через приведение к Object[] можно попытаться положить любой объект в любой массив: Object x[] = new String[3]; x[0] = new Integer(0); Компилятор гарантирует, что когда вы берете элемент из массива, он будет представителем типа элементов самого этого массива. Не важно какого типа переменная его хранит. Именно для обеспечения этой гарантии работает проверка типа времени выполнения, которая и выбрасывает ArrayStoreException. Ситуация похожа на проблему heap pollution в случае дженериков. Только для этого случая такая проблема возникает реже, потому что работает проверка этапа компиляции: // Ошибка компиляции – дженерики инвариантны! List<Object> x = new ArrayList<String>(); #Дженерики 👉@BookJava

Познакомьтесь с востребованным направлением программирования. Освойте базовые инструменты и возможности Java на практике. Узн
Познакомьтесь с востребованным направлением программирования. Освойте базовые инструменты и возможности Java на практике. Узнайте 5 правил синтаксиса языка Java, которые нужно соблюдать каждому начинающему разработчику. Участвуйте в онлайн-интенсиве Skillbox с 28 по 30 июля в 19:00 по московскому времени. Успейте зарегистрироваться: 👉 https://clc.to/Km42KA. Сразу отправим вам на почту чек-лист по знаниям и навыкам, которые необходимы backend-разработчику для трудоустройства. Кому подойдёт интенсив: 📌 Новичкам в программировании. Получите базовые навыки программирования на Java, научитесь писать простой код и узнаете основные функции. Попрактикуетесь в разработке, создадите свой первый проект и заложите основу для новой карьеры. 📌Начинающим разработчикам. Углубите знания о Java и станете увереннее в своих проектах. Разработаете приложение за 3 дня, выявите ошибки, получите практические советы от опытного программиста. Интенсив ведёт Даниил Пилипенко — основатель и директор центра подбора IT-специалистов SymbioWay. С 2004 года разрабатывает и руководит разработкой на Java, PHP и во фронтенде. 50 раз выступил на семинарах и конференциях. 🎁 Всем, кто дойдёт до конца интенсива, подарим электронную книгу «Человек + машина» издательства МИФ. Подключайтесь к прямым эфирам и используйте возможность получить сертификат на 10 000 рублей на любой курс Skillbox. Сделайте первый шаг к перспективной IT-профессии!

Learn Java with Math Автор: Ron Dai (2019) Есть много хороших книг по программированию на Java, но найти подходящую для новичка непросто. Эта книга уменьшает сложность программирования на Java и проводит читателя через сложный путь обучения к эффективной работе. Автор показывает, насколько сильная математическая база является ключом к изучению программирования. Используя это как свою мотивацию, вы в кратчайшие сроки начнете программировать на Java. Во время чтения книги вы: ✔️Изучите основы Java; ✔️Напишете код на Java, используя забавные математические примеры; ✔️Поработаете с переменными и алгоритмами; ✔️Изучите ввод-вывод, циклы и управляющие структуры. Скачать книгу

Подборка каналов для IT специалистов 🎯 https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С https://t.me/kotlin_lib Подборки полезного материала по Kotlin https://t.me/nodejs_lib Подборки по Node js и все что с ним связано https://t.me/React_lib Подборки по React js и все что с ним связано https://t.me/ruby_lib Библиотека Ruby программиста Программирование C++📌 https://t.me/cpp_lib Библиотека C/C++ разработчика https://t.me/cpp_knigi Книги для программистов C/C++ Программирование Python 📌 https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍 https://t.me/BookPython Библиотека Python разработчика https://t.me/python_real Python подборки на русском и английском https://t.me/python_360 Книги по Python Rus Java разработка 📌 https://t.me/BookJava Библиотека Java разработчика https://t.me/java_360 Книги по Java Rus GitHub Сообщество 📌 https://t.me/Githublib Интересное из GitHub CodePen 📌 https://t.me/codepen_1 Сообщество пользователей CodePen Базы данных (Data Base) 📌 https://t.me/database_info Все про базы данных Мобильная разработка: iOS, Android 📌 https://t.me/developer_mobila Мобильная разработка Фронтенд разработка 📌 https://t.me/frontend_1 Подборки для frontend разработчиков Разработка игр 📌 https://t.me/game_devv Все о разработке игр Вакансии 📌 https://t.me/sysadmin_rabota Системный Администратор https://t.me/progjob Вакансии в IT Чат программистов📌 https://t.me/developers_ru Библиотеки 📌 https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги по программированию https://t.me/proglb Библиотека программиста https://t.me/bfbook Книги для программистов БигДата, машинное обучение 📌 https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning Программирование 📌 https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций https://t.me/coddy_academy Полезные советы по программированию QA, тестирование 📌 https://t.me/testlab_qa Библиотека тестировщика Шутки программистов 📌 https://t.me/itumor Шутки программистов Защита, взлом, безопасность 📌 https://t.me/thehaking Канал о кибербезопасности Книги, статьи для дизайнеров 📌 https://t.me/ux_web Статьи, книги для дизайнеров https://t.me/arhitekturamira World Architecture Системное администрирование 📌 https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало) https://t.me/sysadminof Книги для админов, полезные материалы https://t.me/i_odmin Все для системного администратора https://t.me/i_odmin_book Библиотека Системного Администратора https://t.me/i_odmin_chat Чат системных администраторов https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др. Английский 📌 https://t.me/UchuEnglish Английский с нуля Математика 📌 https://t.me/Pomatematike Канал по математике Арбитраж трафика 📌 https://t.me/partnerochkin CPA и арбитраж трафика Крипта 📌 https://t.me/bitkoinoff Новости криптовалют Метавселенная, GameFi, Crypto 📌 https://t.me/metaverse360 DeepFake 📌 https://t.me/deepfakenow Публикуем deepfake видео Мир технологий 📌 https://t.me/mir_teh Видео из мира технологий Excel лайфхак📌 https://t.me/Excel_lifehack

Как инстанцировать экземпляр generic типа? Внутри класса class Foo на generic параметре T невозможно выполнить никакой операт
Как инстанцировать экземпляр generic типа? Внутри класса class Foo<T> на generic параметре T невозможно выполнить никакой оператор: нельзя взять его .class, нельзя применить его в instanceof. Также и вызов на нем оператора new приведет к ошибке. Причина этих ограничений кроется в стирании типов. Дженерик параметры правильно воспринимать скорее как ограничения типов, чем как конкретные типы. Эти ограничения действуют для более строгих проверок на этапе компиляции. В рантайме же информация о конкретных переданных типах-параметрах стирается. А все эти операторы выполняются именно в рантайме. Стандартный простой способ действия здесь – кроме значения типа T передавать еще и объект-дескриптор для этого типа, экземпляр класса Class<T>. Объект может быть создан из дескриптора рефлекшеном. Но существует один хак, способный справиться со стиранием типов. Тип-параметр все-таки остается в одном месте в рантайме. Метод метакласса наследника определившего конкретный тип getGenericSuperclass() возвращает класс, которым параметризован родитель. #Классы #Дженерики 👉@BookJava

Как создать HashMap сразу с элементами? Проблема с созданием Map в том, что в отличие от других коллекций инициализация должна принять параметрами набор пар неопределенного размера. Поэтому varargs здесь не подходит. Самый примитивный, многословный, но простой способ – добавить элементы сразу после создания. Для мапы-поля класса это можно сделать в конструкторе или блоке инициализации. Map<String, String> map = new HashMap<>(); { map.put("one", "first"); map.put("two", "second"); } Идиома double brace initialization. Компактная запись, которая расшифровывается компилятором как создание анонимного класса-наследника от HashMap, с добавлением элементов в блоке статической инициализации. Создание нового класса приводит к дополнительным накладным расходам, так делать не рекомендуется. new HashMap<String, String>() {{ put("one", "first"); put("two", "second"); }}; Для специальных случаев, пустой и одноэлементной неизменяемых мап, в классе Collections есть соответствующие фабричные методы emptyMap() и singletonMap(key, value). Удобно создавать HashMap из стрима. Коллектор Collectors.toMap(keyMapper, valueMapper) с помощью мапперов превратит объекты потока в ключи и значения. В Java 9 наконец появились фабричные метод Map.of(), перегруженный для разного количества пар параметров, и Map.ofEntries() с varargs-аргументом. До Java 9 подобное было реализовано во многих популярных библиотеках, например ImmutableMap.of в Guava и MapUtils.putAll() в Apache Commons. #Коллекции ​👉@BookJava

Как стать бэкенд-разработчиком, учитывая, что эта специальность является одной из самых востребованных, но требует достаточно
Как стать бэкенд-разработчиком, учитывая, что эта специальность является одной из самых востребованных, но требует достаточно серьезной подготовки, знаний и навыков? Сейчас наблюдается критический дефицит программистов разного уровня, особенно специалистов с опытом . Только на hh_ru открыто более 47 000 вакансий. И они могут висеть месяцами! Бэкэнд-разработчик отвечает за все внутренние процессы приложений и сайтов. Это самые настоящие бойцы невидимого фронта. Им подвластны сервера, базы данных, основная логика программных приложений . Обучение на бэкенд-разработчика проходит в несколько этапов - от введения в Java до получения практических навыков и освоения полноценной профессии. Почему Java? Это один из самых гибких, универсальных, простых и надежных языков в программировании. Кроссплатформенность Java дает возможность запускать написанный код на любом устройстве. 25 июля стартует бесплатный курс «Введение в Java» от IT-Академии «Точка Входа», на котором вы можете оценить свои способности и принять решение о начале серьезного обучения. 4 недели и 10 практических заданий помогут понять, насколько вам интересно пополнить ряды бэкендеров. Регистрируйтесь на сайте: https://bit.ly/3oepzPt

Lombok — библиотека, генерирующая за вас бойлерплейт (шаблонный) код. Даёт возможность создавать классы ускоренно, так как не надо вручную прописывать, например, геттеры и сеттеры, всё делается с помощью аннотаций. Вы можете создавать неизменяемые классы вместе с типовыми методами и геттерами к ним — с помощью @Vаlue. Все поля класса будут финализированы и сделаны приватными. 👉@BookJava