Java for Beginner
870 subscribers
1.01K photos
275 videos
14 files
1.69K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Что такое тернарный оператор? 🤓

Ответ:

Тернарный оператор
— это сокращенная форма записи условного оператора if-else.

Имеет синтаксис: условие ? выражение1 : выражение2.

Если условие истинно, вычисляется и возвращается выражение1, иначе — выражение2. Важно, что типы выражение1 и выражение2 должны быть совместимы для присваивания. Используется для краткости, например: int max = (a > b) ? a : b;.

Не стоит злоупотреблять вложенными тернарными операторами — код становится трудночитаемым.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
История технологий сегодня — 27 марта

ℹ️ Кто родился в этот день

Джон Ро́бинсон Пирс (англ. John Robinson Pierce; 27 марта 1910, Де-Мойн — 2 апреля 2002, Саннивейл, Калифорния) — американский инженер и писатель в жанре научной фантастики. Его работы охватывали широкие области инженерных наук и прикладной физики от радиосвязи, технологий микроволнового излучения, психоакустики до написания компьютерной музыки и научно-фантастических художественных произведений. Начиная с 1936 года, Пирс плодотворно работал в Bell Labs, где занимался различными исследованиями и сотрудничал с многими известными учёными, среди его друзей — нобелевский лауреат Уильям Шокли. Вот лишь краткий перечень работ Пирса, дающий понимание спектра его интересов как инженера и учёного:
Исследования и разработка электронных ламп, в частности, совместное участие с Рудольфом Компфнером в создании лампы бегущей волны;
Изобретение вторично-электронного умножителя;
Исследования в области разработки магнетронов для радаров и отражательных клистронов;
Участие в разработке импульсно-кодовой модуляции для оцифровки аналоговых сигналов (совместно с Клодом Шенноном и Бернардом Оливером);
Большая роль в разработке первого коммерческого спутника связи Телстар. Артур Кларк за эту работу назвал Пирса «одним из двух отцов спутниковой связи» (наряду с Хэролдом Розеном).


Вильге́льм Ко́нрад Рёнтген (в русской традиции Рентге́н [р’инг’э́н]; нем. Wilhelm Conrad Röntgen; 27 марта 1845 года, Леннеп — 10 февраля 1923 года, Мюнхен) немецкий физик, работавший в Вюрцбургском университете. С 1875 года служил профессором в Хоэнхайме, с 1876 года — профессором физики в Страсбурге, с 1879 года — в Гиссене, с 1885 года — в Вюрцбурге, с 1899 года — в Мюнхене. Первый в истории лауреат Нобелевской премии по физике (1901 год) за открытие в 1895 году излучения, впоследствии названного в его честь.


🌐 Знаковые события

1878 — Русский крестьянин Ф. Блинов подал заявку на получение патента на изобретённый им «вагон с нескончаемыми рельсами» (первый в мире гусеничный трактор).


#Biography #Birth_Date #Events #27марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Раздел 8. Stream API и функциональный стиль в Java

Глава 7: Stream API в экосистеме Java. Интеграционные паттерны

Optional и Stream — братья по духу

Optional и Stream появились в Java 8 как единое архитектурное видение: переход от императивного управления состоянием к декларативной композиции операций.

Оба API разделяют ключевые принципы: ленивость вычислений, функциональная обработка отсутствия значения (пустой поток / пустой Optional), цепочечная композиция методов. Понимание их взаимодействия открывает идиомы, устраняющие громоздкие проверки if (x != null) и if (optional.isPresent()).


Optional.stream(): мост между мирами

Метод Optional.stream(), добавленный в Java 9, — один из наиболее недооценённых инструментов. Он превращает Optional<T> в Stream<T>: непустой Optional становится потоком из одного элемента, пустой — пустым потоком. Это позволяет интегрировать Optional в потоковые конвейеры без императивных ветвлений.

Императивный антипаттерн:
List<String> names = new ArrayList<>();
Optional<User> optionalUser = userRepository.findById(userId);

if (optionalUser.isPresent()) {
User user = optionalUser.get();
names.add(user.name());
}
// names содержит 0 или 1 элемент, логика размазана по условию


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

Декларативная трансформация:
List<String> names = userRepository.findById(userId)
.stream() // Optional<User> -> Stream<User> (0 или 1 элемент)
.map(User::name) // Stream<String>
.collect(toList()); // List<String>, размер 0 или 1


Здесь отсутствие значения обрабатывается естественно: пустой Optional порождает пустой поток, map не применяется, collect возвращает пустой список. Нет условий, нет ветвлений, нет мутации внешнего состояния.


Композиция Optional в потоковых цепочках

Сила Optional.stream() проявляется в сложных конвейерах, где несколько операций могут вернуть пустой результат:
// Цепочка: заказ -> клиент -> адрес -> город
List<String> cities = orders.stream()
.map(Order::getCustomerId)
.map(customerRepository::findById) // Stream<Optional<Customer>>
.flatMap(Optional::stream) // Stream<Customer>, пустые отфильтрованы
.map(Customer::getAddress)
.map(Address::getCity)
.distinct()
.collect(toList());


Без Optional.stream() потребовались бы вложенные filter(Optional::isPresent) и map(Optional::get), или flatMap с лямбдой, возвращающей Stream.empty() или Stream.of(value).


#Java #для_новичков #beginner #stream_api #optional
👍7
flatMap для раскрытия вложенности

Когда Optional содержит объект, который сам возвращает поток или коллекцию, flatMap объединяет уровни вложенности:
// Найти все заказы пользователя по ID, если пользователь существует
Stream<Order> userOrders = userRepository.findById(userId)
.stream() // Stream<User>
.flatMap(u -> u.getOrders().stream()); // Stream<Order>

// Сбор в список, если пользователь найден
List<Order> orders = userOrders.collect(toList());


Здесь flatMap играет двойную роль: раскрывает Optional (через stream()) и раскрывает внутреннюю коллекцию заказов. Пустой Optional прерывает цепочку, возвращая пустой поток.

Более сложный сценарий — цепочка зависимых Optional:
// Было: глубокая вложенность ifPresent
optionalUser.ifPresent(user ->
user.getProfile().ifPresent(profile ->
profile.getAvatar().ifPresent(avatar ->
process(avatar)
)
)
);

// Стало: плоская композиция через stream и flatMap
userRepository.findById(userId)
.stream()
.flatMap(u -> u.getProfile().stream())
.flatMap(p -> p.getAvatar().stream())
.forEach(this::process);


Каждый flatMap обрабатывает потенциальное отсутствие значения, пропуская дальнейшие операции для пустых Optional. Результат — линейная цепочка вместо пирамиды вложенности.


Stream в Optional: reduce и find

Обратное направление — терминальные операции потока, возвращающие Optional. Это естественное завершение конвейера, где результат может отсутствовать:
Optional<Book> oldest = library.stream()
.filter(b -> b.genre() == Genre.FICTION)
.min(comparing(Book::year)); // Optional<Book>

// Интеграция обратно в поток
List<String> oldestTitle = oldest
.stream() // Optional -> Stream
.map(Book::title)
.collect(toList());


findFirst(), findAny(), min(), max(), reduce() — все возвращают Optional, сигнализируя о возможности пустого результата. Композиция этих операций с Optional.stream() создаёт бесшовные цепочки обработки, где отсутствие данных — нормальный сценарий, не исключительная ситуация.


Обработка коллекций в Optional

Когда Optional содержит коллекцию, которая сама может быть пустой, Optional.stream() сочетается с flatMap для нормализации:
// Репозиторий возвращает Optional<List<Order>> — неудачный дизайн, но встречается
Optional<List<Order>> optionalOrders = orderRepository.findByCustomerId(id);

// Нормализация: Optional<List<Order>> -> Stream<Order>
Stream<Order> orders = optionalOrders
.stream() // Stream<List<Order>>
.flatMap(List::stream); // Stream<Order>, пустой если Optional пуст или список пуст

// Или в одном выражении
List<Order> result = optionalOrders.stream()
.flatMap(List::stream)
.filter(Order::isActive)
.collect(toList());


Этот паттерн устраняет необходимость проверять optionalOrders.isPresent() и optionalOrders.get().isEmpty() отдельно.


#Java #для_новичков #beginner #stream_api #optional
👍4
Что выведет код?

import java.util.*;
import java.util.stream.*;

public class Task270326 {
public static void main(String[] args) {
List<Optional<String>> optionals = Arrays.asList(
Optional.of("java"),
Optional.empty(),
Optional.of("kotlin"),
Optional.empty(),
Optional.of("scala")
);

List<String> result = optionals.stream()
.flatMap(opt -> opt.stream())
.map(String::toUpperCase)
.collect(Collectors.toList());

System.out.println(result);
}
}


#Tasks
👍3
https://devforge.ru/

Маленький анонс...

Первый шаг к самостоятельности сделан 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
Подписался час назад... 🤨

Теперь 2 вопроса.

Как нашел, а главное ПОЧЕМУ????

ссылка - чпуньк

🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣3🤯11
Что такое методы по умолчанию (default methods) в интерфейсах? 🤓

Ответ:

Начиная с Java 8, методы интерфейсов могут иметь реализацию с ключевым словом default.

Это позволяет добавлять новые методы в интерфейсы, не ломая существующие классы, которые этот интерфейс реализуют.

Класс может переопределить default-метод. Если класс реализует два интерфейса с одинаковыми default-методами, компилятор требует явно переопределить метод в классе (или вызвать конкретную реализацию через InterfaceName.super.method())..


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
История технологий сегодня — 28 марта

ℹ️ Кто родился в этот день

Джером Айзек Фри́дман (англ. Jerome Isaac Friedman; род. 28 марта 1930, Чикаго) американский физик еврейского происхождения, лауреат Нобелевской премии по физике в 1990 году за основополагающие исследования, подтверждающие существование кварков («за пионерские исследования глубоконеупругого рассеяния электронов на протонах и связанных нейтронах, существенно важных для разработки кварковой модели в физике частиц»).


🌐 Знаковые события

1993 — вспышка сверхновой звезды SN 1993J в галактике M81. В то время она была второй по яркости сверхновой, наблюдаемой в XX веке. Первой сверхновой была SN 1987A, которая взорвалась в соседней галактике Большое Магелланово Облако в 1987 году.


#Biography #Birth_Date #Events #28марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
С 21.03 по 27.03
Предыдущий пост(с 14.03 по 20.03)

Воскресный мотивационный пост:
Не было мотивации, а вообще нужна?) (Признался что только один читает... Напишу ему в личку)

Запись встреч/видео:
Retry vs Circuit Breaker: кто спасёт ваши сервисы от каскадных падений?

Обучающие статьи:
Раздел 8. Stream API и функциональный стиль

Глава 6: Parallel Stream
Гонка параллельных stream в «Библиотеке»

Глава 7: Stream API в экосистеме Java. Интеграционные паттерны
Примитивные стримы (IntStream, LongStream)
Optional и Stream — братья по духу

[Совет по Java #018]
Тема: Анонимные классы и лямбды захватывают переменные.

[Совет по Java #019]
Тема: switch по enum без обработки всех значений — бомба замедленного действия.


Полезные статьи и видео:
10 ошибок API

Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
👍4🔥1
👍4🔥1🤓1
👍1
🤣5
🤣2🔥1
😱2
История технологий сегодня — 29 марта

ℹ️ Кто родился в этот день

Николай Аполлонович Анфимов (29 марта 1935, Москва — 29 октября 2019, там же) — советский и российский учёный-механик, специалист в области аэродинамики, теплотехники (аэромеханики, аэрогазодинамики, теплообмена, теплозащиты, наземных испытаний ракет и космических аппаратов, системного проектирования космических транспортных систем), доктор технических наук (1972), профессор, академик РАН (1997).


🌐 Знаковые события

1999 — промышленный индекс Доу Джонса впервые превысил отметку в 10 000 пунктов во время роста «пузыря доткомов».


#Biography #Birth_Date #Events #29марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Java for Beginner
https://devforge.ru/ Маленький анонс... Первый шаг к самостоятельности сделан 💪
Ради интереса добавил чат, пока думаю что там насобирать))) ✌️

Пишите, заодно и потестим))) 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤣3🔥1