🔍 Ответ на задачу про исключение в стримах 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
🔍 Ответ на задачу про MegaClass 📊
Давайте разберём, что именно будет напечатано при выполнении данного кода. Здесь мы имеем класс MegaClass с переопределёнными методами equals() и hashCode(), и работаем с объектами этого класса в HashSet. Обратите внимание на влияние изменения состояния объекта на результат работы методов, связанных с коллекциями.
Пояснения:
A: set.add(o) - Возвращает true, потому что объект o только что добавлен в set.
B: set.contains(new MegaClass(10)) - Возвращает false, так как после изменения поля i, o имеет hashCode = 1000, который не совпадает с 1000 у new MegaClass(10).
C: set.add(new MegaClass(10)) - Возвращает true, объект с hashCode равным 10 не найден в set, потому что изменили o.
D: set.contains(new MegaClass(1000)) - Возвращает false, так как теперь oбъект, у которого hashcode 1000, содержится в set, но предыдущий объект был добавлен с хешкодом 10 и поэтому он не найдется теперь.
E: new MegaClass(10).equals(new MegaClass(1000)) - Возвращает false, так как поля i отличаются.
📈 Этот пример отлично демонстрирует, насколько важно соблюдать неизменяемость полей, участвующих в вычислении hashCode() и equals(), при работе с коллекциями.
Если вам понравился анализ этого кода и вы хотите узнавать больше, ставьте лайк, подписывайтесь на канал и делитесь своими мыслями в комментариях! 👍💬
#java #hashcode #equals #collections #java_interview_tasks
Давайте разберём, что именно будет напечатано при выполнении данного кода. Здесь мы имеем класс MegaClass с переопределёнными методами equals() и hashCode(), и работаем с объектами этого класса в HashSet. Обратите внимание на влияние изменения состояния объекта на результат работы методов, связанных с коллекциями.
Пояснения:
A: set.add(o) - Возвращает true, потому что объект o только что добавлен в set.
B: set.contains(new MegaClass(10)) - Возвращает false, так как после изменения поля i, o имеет hashCode = 1000, который не совпадает с 1000 у new MegaClass(10).
C: set.add(new MegaClass(10)) - Возвращает true, объект с hashCode равным 10 не найден в set, потому что изменили o.
D: set.contains(new MegaClass(1000)) - Возвращает false, так как теперь oбъект, у которого hashcode 1000, содержится в set, но предыдущий объект был добавлен с хешкодом 10 и поэтому он не найдется теперь.
E: new MegaClass(10).equals(new MegaClass(1000)) - Возвращает false, так как поля i отличаются.
📈 Этот пример отлично демонстрирует, насколько важно соблюдать неизменяемость полей, участвующих в вычислении hashCode() и equals(), при работе с коллекциями.
Если вам понравился анализ этого кода и вы хотите узнавать больше, ставьте лайк, подписывайтесь на канал и делитесь своими мыслями в комментариях! 👍💬
#java #hashcode #equals #collections #java_interview_tasks
👍9🔥9❤6
🔍 Ответ на задачу про работу String.valueOf() с null! 💡
Вызов String.valueOf((Object) null) в первой строке приводит к тому, что Java воспринимает null как объект, и возвращает строку "null".
Во второй строке, String.valueOf(null) вызывает перегруженный метод, который принимает char[]. Но поскольку передан null, вызов упадет с NPE. 🚀
Выводы: всегда смотрите реализацию метода, который вызывается.
Может быть несколько перегруженных методов, реализация которых очень сильно отличается.
Спасибо, что дочитали до сюда) Не забудьте поставить лайк, оставить комментарий и подписаться! 🙌
#Java #NullPointerException #String #java_interview_tasks
String s1 = String.valueOf((Object) null);
String s2 = String.valueOf(null);
System.out.println(Objects.equals(s1, s2));
Вызов String.valueOf((Object) null) в первой строке приводит к тому, что Java воспринимает null как объект, и возвращает строку "null".
Во второй строке, String.valueOf(null) вызывает перегруженный метод, который принимает char[]. Но поскольку передан null, вызов упадет с NPE. 🚀
Выводы: всегда смотрите реализацию метода, который вызывается.
Может быть несколько перегруженных методов, реализация которых очень сильно отличается.
Спасибо, что дочитали до сюда) Не забудьте поставить лайк, оставить комментарий и подписаться! 🙌
#Java #NullPointerException #String #java_interview_tasks
Telegram
Java Interview Tasks
Что будет в результате исполнения этого кода?
👍30❤5🔥3
🔍 Ответ на задачу про сравнение лонгов:🌟
В методе main, вызывается checkEvent с новым объектом Event, где id инициализирован null. Поэтому, при сравнении (event.id == 42) произойдет неявный вызов метода java.lang.Long.longValue(), что вызовет NullPointerException и программа завершится с ошибкой.
Программа выведет исключение:
Exception in thread "main" java.lang.NullPointerException
👨💻 Советы: всегда проверяйте null-ссылки перед использованием объектов во избежание необработанных исключений!
Интересная задача? Поддержите лайком и оставьте комментарий! 😊👇
#java #exceptionHandling #java_interview_tasks
В методе main, вызывается checkEvent с новым объектом Event, где id инициализирован null. Поэтому, при сравнении (event.id == 42) произойдет неявный вызов метода java.lang.Long.longValue(), что вызовет NullPointerException и программа завершится с ошибкой.
Программа выведет исключение:
Exception in thread "main" java.lang.NullPointerException
👨💻 Советы: всегда проверяйте null-ссылки перед использованием объектов во избежание необработанных исключений!
Интересная задача? Поддержите лайком и оставьте комментарий! 😊👇
#java #exceptionHandling #java_interview_tasks
🔥9👍7🙏1
🔍 Ответ на задачу про Immutable объекты в Java 🔒
✍️ В Java объект типа String является неизменяемым (immutable). Операция s1.concat(" World") создает новый объект строки и присваивает его s1. Переменная s2 остается ссылаться на старую строку "Hello". Поэтому программа выведет: Hello
Если задача понравилась, ставьте лайк 👍, подписывайтесь на канал и пишите свои ответы и вопросы в комментариях! Обсудим вместе 😊
#java #string #immutable #interview #java_tasks #java_interview_tasks
✍️ В Java объект типа String является неизменяемым (immutable). Операция s1.concat(" World") создает новый объект строки и присваивает его s1. Переменная s2 остается ссылаться на старую строку "Hello". Поэтому программа выведет: Hello
Если задача понравилась, ставьте лайк 👍, подписывайтесь на канал и пишите свои ответы и вопросы в комментариях! Обсудим вместе 😊
#java #string #immutable #interview #java_tasks #java_interview_tasks
Telegram
Java Interview Tasks
Посмотрите на следующий код и выберите, что будет выведено на экран:
public class Main {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = s1;
s1 = s1.concat(" World");
System.out.println(s2);
…
public class Main {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = s1;
s1 = s1.concat(" World");
System.out.println(s2);
…
👍19❤3🔥2😢1
🔍 Ответ на задачу про работу с HashMap и null 🗺
✍️ HashMap в Java разрешает использовать ключ null.
Правильный ответ: 5
Если задача была полезна, ставь лайк 👍, подписывайся и пиши свое решение или вопросы в комментариях! 💬
#java #hashmap #null #map #java_tasks #java_interview_tasks
✍️ HashMap в Java разрешает использовать ключ null.
Правильный ответ: 5
Если задача была полезна, ставь лайк 👍, подписывайся и пиши свое решение или вопросы в комментариях! 💬
#java #hashmap #null #map #java_tasks #java_interview_tasks
Telegram
Java Interview Tasks
Какой результат будет выведен на экран после выполнения следующего кода?
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put(null, 1);
…
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put(null, 1);
…
👍10🔥9❤3
🔍 Ответ на задачу про вычисление среднего двух чисел в Java:
👉 Рассмотрим код:
static double average(int x, int y) {
return (x + y) / 2;
}
public static void main(String[] args) {
System.out.println(average(0,1));
}
Что напечатает программа? 🤔
Метод average принимает два int, возвращает double.
(x + y) / 2 — деление целых чисел, результат тоже будет целым (int). Только в конце оно автоконвертируется в double.
Для average(0, 1):
(0 + 1) / 2 = 1 / 2 = 0 (целое деление!)
💡 Вернётся 0.0 (так как double)
✏️ Если хотите получить десятичное число, нужно хотя бы одно число привести к double:
return (x + y) / 2.0;
Тогда результат будет 0.5!
❗️ Не забывайте про особенности целочисленного деления в Java!
Если было полезно — ставьте лайк❤️, подписывайтесь и пишите комментарии!
#java #javacode #программирование #интервью #java_interview_tasks
👉 Рассмотрим код:
static double average(int x, int y) {
return (x + y) / 2;
}
public static void main(String[] args) {
System.out.println(average(0,1));
}
Что напечатает программа? 🤔
Метод average принимает два int, возвращает double.
(x + y) / 2 — деление целых чисел, результат тоже будет целым (int). Только в конце оно автоконвертируется в double.
Для average(0, 1):
(0 + 1) / 2 = 1 / 2 = 0 (целое деление!)
💡 Вернётся 0.0 (так как double)
✏️ Если хотите получить десятичное число, нужно хотя бы одно число привести к double:
return (x + y) / 2.0;
Тогда результат будет 0.5!
❗️ Не забывайте про особенности целочисленного деления в Java!
Если было полезно — ставьте лайк❤️, подписывайтесь и пишите комментарии!
#java #javacode #программирование #интервью #java_interview_tasks
Telegram
Java Interview Tasks
Что напечатает код?
❤10🔥8👍3
🔍 Ответ на задачу про преобразование List в Map в Java
Давайте разберём, что произойдёт в этом коде:
🔸 Мы превращаем список строк в Map, где ключ — длина строки, а значение — сама строка.
📌 Важно: toMap по умолчанию выбрасывает исключение, если встречает дубликаты ключей (а у нас ключи — длины строк).
При первом попадании строки длины 3 ("one") всё ок. Но когда попадётся "two" — возникнет конфликт ключей!
❗️ Результат: Код выбросит исключение типа IllegalStateException: Duplicate key
То есть ничего не напечатает, а программа упадёт с ошибкой.
✅ Если хотите избежать ошибки — добавьте в toMap третий аргумент (как решать конфликт):
🔔 Было полезно? Ставь лайк, подписывайся и пиши свои вопросы или комменты!
#java #stream #map #interview #toMap #java_interview_tasks
Давайте разберём, что произойдёт в этом коде:
List<String> list = Arrays.asList("one", "two", "three", "four");
Map<Integer, String> size2Str = list.stream()
.collect(Collectors.toMap(String::length, Function.identity()));
System.out.println(size2Str.size()); 🔸 Мы превращаем список строк в Map, где ключ — длина строки, а значение — сама строка.
📌 Важно: toMap по умолчанию выбрасывает исключение, если встречает дубликаты ключей (а у нас ключи — длины строк).
При первом попадании строки длины 3 ("one") всё ок. Но когда попадётся "two" — возникнет конфликт ключей!
❗️ Результат: Код выбросит исключение типа IllegalStateException: Duplicate key
То есть ничего не напечатает, а программа упадёт с ошибкой.
✅ Если хотите избежать ошибки — добавьте в toMap третий аргумент (как решать конфликт):
.collect(Collectors.toMap(String::length, Function.identity(), (s1, s2) -> s1))
// Этот вариант оставит первое значение.
🔔 Было полезно? Ставь лайк, подписывайся и пиши свои вопросы или комменты!
#java #stream #map #interview #toMap #java_interview_tasks
Telegram
Java Interview Tasks
Что напечатает код?
👍21❤4🔥4 1
🔍 Ответ на задачу про рекурсию, try-catch и counter:
Что там происходит?
Каждый раз в try печатается "do" и выбрасывается исключение. Затем в catch, если counter <= 3 (а это true до значения 3 включительно), снова вызывается doWithCounter, увеличивая counter при этом!
⚠️ Но! Используется counter++, а не ++counter. Это значит, что в рекурсивный вызов идёт старое значение (а counter увеличится уже после передачи в функцию).
То есть вы всегда передаёте "0" в рекурсию, и создаётся бесконечная рекурсия.
❗️Первый вызов поймает исключение, зайдёт в catch и вызовет doWithCounter(0). Этот вызов опять напечатает "do" и опять вызовет doWithCounter(0), и так далее, пока не случится StackOverflowError. "do" будет выводиться до переполнения стека.
📢 Правильный ответ: "do" напечатается более 4-х раз.
👉 Было интересно? Ставь лайк, подписывайся и пиши вопросы в комментарии!
#java #recursion #exception #interview #стек #java_interview_tasks
Что там происходит?
Каждый раз в try печатается "do" и выбрасывается исключение. Затем в catch, если counter <= 3 (а это true до значения 3 включительно), снова вызывается doWithCounter, увеличивая counter при этом!
⚠️ Но! Используется counter++, а не ++counter. Это значит, что в рекурсивный вызов идёт старое значение (а counter увеличится уже после передачи в функцию).
То есть вы всегда передаёте "0" в рекурсию, и создаётся бесконечная рекурсия.
❗️Первый вызов поймает исключение, зайдёт в catch и вызовет doWithCounter(0). Этот вызов опять напечатает "do" и опять вызовет doWithCounter(0), и так далее, пока не случится StackOverflowError. "do" будет выводиться до переполнения стека.
📢 Правильный ответ: "do" напечатается более 4-х раз.
👉 Было интересно? Ставь лайк, подписывайся и пиши вопросы в комментарии!
#java #recursion #exception #interview #стек #java_interview_tasks
Telegram
Java Interview Tasks
Сколько раз напечатается "do"?
👍8🔥7❤1
🔍 Друзья, разберёмся, какой интерфейс в Java используется для сортировки объектов! (Ответ на вопрос про интерфейсы для сравнения)
Правильный ответ: Comparator и Comparable.
Но из списка в впоросе верный вариант — Comparator!
Интерфейс Comparator используется для задания порядка сортировки объектов, когда нельзя или не хочется изменять сам класс объекта.
Для справки:
CompareTo, Sort и Sortable — таких интерфейсов в стандартной библиотеке Java нет.
👀 Пример применения Comparator:
Если было полезно — ставьте лайк, подписывайтесь на канал и пишите в комментариях, что бы ещё разобрать! 😉
#java_interview_tasks #java #интервью #собеседование #сортировка #Comparator #Comparable
Правильный ответ: Comparator и Comparable.
Но из списка в впоросе верный вариант — Comparator!
Интерфейс Comparator используется для задания порядка сортировки объектов, когда нельзя или не хочется изменять сам класс объекта.
Для справки:
CompareTo, Sort и Sortable — таких интерфейсов в стандартной библиотеке Java нет.
👀 Пример применения Comparator:
List<String> list = Arrays.asList("Java", "Python", "C++");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
System.out.println(list); // [Java, C++, Python]Если было полезно — ставьте лайк, подписывайтесь на канал и пишите в комментариях, что бы ещё разобрать! 😉
#java_interview_tasks #java #интервью #собеседование #сортировка #Comparator #Comparable
Telegram
Java Interview Tasks
Какой интерфейс в Java используется для сортировки?
CompareTo / Comparator / Sort / Sortable
CompareTo / Comparator / Sort / Sortable
👍10🔥5🤗2❤1
🔍 Ответ на задачу про среднее двух чисел 💡
2_000_000_000 + 2_000_000_000 = 4_000_000_000
Но тут будет переполнение int 😱
Потому что тип int в Java ограничен максимумом в 2_147_483_647
4_000_000_000 выходит за пределы, результат сложения будет ОТРИЦАТЕЛЬНЫЙ (из-за переполнения)!
На деле (x + y) станет:
4000000000 - 2*2147483648 = -294967296
Дальше происходит деление -294967296 / 2 = -147483648
🔹 Ответ:
В консоль будет выведено: -147483648.0
❗️Тут ошибка в логике: надо было привести к long, либо double ДО сложения.
Понравилось объяснение? 👍
Ставьте лайк, подписывайтесь и пишите в комментариях, сталкивались ли вы с похожими проблемами!
#java #переполнение #арифметика #middlejava #интервью #java_interview_tasks
static double average(int x, int y) {
return (x + y) / 2;
}2_000_000_000 + 2_000_000_000 = 4_000_000_000
Но тут будет переполнение int 😱
Потому что тип int в Java ограничен максимумом в 2_147_483_647
4_000_000_000 выходит за пределы, результат сложения будет ОТРИЦАТЕЛЬНЫЙ (из-за переполнения)!
На деле (x + y) станет:
4000000000 - 2*2147483648 = -294967296
Дальше происходит деление -294967296 / 2 = -147483648
🔹 Ответ:
В консоль будет выведено: -147483648.0
❗️Тут ошибка в логике: надо было привести к long, либо double ДО сложения.
Понравилось объяснение? 👍
Ставьте лайк, подписывайтесь и пишите в комментариях, сталкивались ли вы с похожими проблемами!
#java #переполнение #арифметика #middlejava #интервью #java_interview_tasks
Telegram
Java Interview Tasks
Что напечатает код?
🔥8❤2 2