🔍 Ответ на задачу про исключение в стримах Java! 🚨
При выполнении данного кода возникнет исключение NullPointerException.
Давайте разберём, почему это происходит. 🤔
Код:
Проблема возникает в строчке findFirst(). Метод .map(Fee::getDescription) создаёт стрим, где первый элемент имеет значение null из-за description равного null в объекте Fee.
Когда findFirst() пытается вернуть найденное значение — а это null — метод Optional.of() выбрасывает NullPointerException, поскольку Optional.of() не позволяет обёртывать null значениями. Для обработки null значений нужно использовать Optional.ofNullable().
Чтобы исправить это и избежать исключения, можно немного изменить этот код:
String s = fees.stream()
.map(Fee::getDescription)
.filter(Objects::nonNull) // добавляем этот фильтр
.findFirst()
.orElse("1");
Этот код сначала фильтрует все null значения из стрима и предотвращает NullPointerException.
Если вам понравился разбор, не забудьте поставить лайк, подписаться и оставить комментарий! 😊
#streamAPI #nullHandling #java_interview_tasks
При выполнении данного кода возникнет исключение NullPointerException.
Давайте разберём, почему это происходит. 🤔
Код:
public static class Fee {
private String description;
public Fee(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
public static void main(String[] args) {
List<Fee> fees = List.of(new Fee(null));
String s = fees.stream()
.map(Fee::getDescription)
.findFirst()
.orElse("1");
System.out.println(s);
}
Проблема возникает в строчке findFirst(). Метод .map(Fee::getDescription) создаёт стрим, где первый элемент имеет значение null из-за description равного null в объекте Fee.
Когда findFirst() пытается вернуть найденное значение — а это null — метод Optional.of() выбрасывает NullPointerException, поскольку Optional.of() не позволяет обёртывать null значениями. Для обработки null значений нужно использовать Optional.ofNullable().
Чтобы исправить это и избежать исключения, можно немного изменить этот код:
String s = fees.stream()
.map(Fee::getDescription)
.filter(Objects::nonNull) // добавляем этот фильтр
.findFirst()
.orElse("1");
Этот код сначала фильтрует все null значения из стрима и предотвращает NullPointerException.
Если вам понравился разбор, не забудьте поставить лайк, подписаться и оставить комментарий! 😊
#streamAPI #nullHandling #java_interview_tasks
🔥22👍11❤2🤝1
🔍 Ответ на задачу про Stream.peek(): Почему ничего не напечаталось? 🕵️♂️
Метод
Объяснение: Стримы в Java ленивы. Промежуточные операции (filter, map, peek) не выполняются до тех пор, пока не будет вызвана терминальная операция (collect, forEach, count и т.д.). В данном коде терминальной операции нет, поэтому конвейер даже не запустится.
Вывод: Код не выведет ничего. Чтобы
⚡️ Не перепутайте:
Всегда завершайте цепочку стрима терминальной операцией.
#java #streamapi #peek #lazy #backend #интервью #java_interview_tasks
Метод
peek() часто используют для логирования промежуточных этапов стрима. Но новички часто забывают про "ленивость" стримов.Объяснение: Стримы в Java ленивы. Промежуточные операции (filter, map, peek) не выполняются до тех пор, пока не будет вызвана терминальная операция (collect, forEach, count и т.д.). В данном коде терминальной операции нет, поэтому конвейер даже не запустится.
Вывод: Код не выведет ничего. Чтобы
peek сработал, нужно добавить, например, .collect(Collectors.toList()) в конце.⚡️ Не перепутайте:
peek() предназначен для отладки, не используйте его для изменения состояния объектов (side-effects).Всегда завершайте цепочку стрима терминальной операцией.
#java #streamapi #peek #lazy #backend #интервью #java_interview_tasks
🔥4❤3