Эта лекция — для тех, кто уже уверенно пишет if, for и while и хочет узнать, что появилось в Java за последние годы и как это применять на практике.
Классический switch — это оператор. Он не возвращает значение, требует break и легко забывается. С Java 14 появились switch-выражения — они возвращают значение.
Если в case нужно несколько строк — используют блок с yield.
yield — это «вернуть значение из блока switch». Похоже на return, но для switch.enum — это особенно удобно.Когда циклы вложены, break выходит только из внутреннего. Чтобы выйти из обоих — используют метки.
outer: — метка, имя для внешнего цикла.break outer; — выйти из цикла с этой меткой.continue.return.С Java 10 можно не писать тип переменной — компилятор выведет его сам.
var — не динамическая типизация. Тип всё равно фиксируется на этапе компиляции. Это просто сокращение записи.С Java 15 многострочные строки можно писать без склейки и экранирования.
""".Optional — контейнер, который может содержать значение или быть пустым. Это способ сказать: «здесь может не быть результата».
optional.get() без проверки — это то же, что вернуться к null. Используй orElse, orElseThrow, ifPresent.record — это класс для хранения данных. Компилятор сам создаёт конструктор, геттеры, equals, hashCode и toString.
x() и y(), без get.Stream API — функциональный способ обработки коллекций. Мы разбирали его в лекции по ООП, но здесь — углублённо.
Collectors — «сборщики», которые превращают поток в коллекцию или другой результат.
Если данных много, можно обрабатывать их параллельно.
parallelStream не всегда быстрее. На маленьких коллекциях он медленнее из-за накладных расходов. И он небезопасен для операций, которые меняют общее состояние.С Java 16 можно не приводить тип вручную после instanceof.
s существует только внутри блока if. Это безопаснее ручного приведения.if (!(obj instanceof String s)) return; — после этого s доступен дальше по коду.С Java 21 switch умеет проверять типы и сразу приводить к ним.
sealed гарантирует, что наследники известны — компилятор проверит, что все случаи покрыты.default не нужен, если все варианты перечислены.case Circle c when c.radius() > 10 -> ...instanceof + if-else. Код становится короче и безопаснее.Возьмём типичный «старый» код и перепишем его современными приёмами.
orElse.yield?var и где его можно использовать?filter и map в Stream?parallelStream может навредить?instanceof?Возьмите код и перепишите его с использованием современных приёмов.
Что сделать:
record.total() через Stream.var там, где уместно.Мы разобрали продвинутые приёмы. Куда двигаться дальше?
break.switch.Student (имя, возраст, оценки) в record с валидацией.Optional<String> — например, поиск пользователя по ID.Map<Integer, List<String>> — группировка по длине.Order из практики полностью.🚀
Продвинутые приёмы — это инструменты
Используй их осознанно. Главное — читаемость и надёжность кода, а не «всё новое».