Map: Группировка данных с Collectors.groupingBy()
В Java можно группировать данные в Map, используя Collectors.groupingBy().
📌 Пример:
🔹 Разбор:
✔️ groupingBy() — группирует данные по ключу.
✔️ word.charAt(0) — используем первую букву слова как ключ.
✔️ В результате получается Map<Character, List<String>>.
💡 Запомни:
✔️ groupingBy() удобно использовать для агрегации данных.
✔️ Можно комбинировать с mapping() для преобразования значений.
📍 Теги: #java #stream #collectors #groupingBy #collections
В Java можно группировать данные в Map, используя Collectors.groupingBy().
import java.util.*;
import java.util.stream.Collectors;
public class GroupingExample {
public static void main(String[] args) {
List<String> words = List.of("apple", "banana", "avocado", "blueberry", "cherry");
Map<Character, List<String>> groupedWords = words.stream()
.collect(Collectors.groupingBy(word -> word.charAt(0)));
System.out.println(groupedWords);
}
}
✔️ Вывод:
{a=[apple, avocado], b=[banana, blueberry], c=[cherry]}
🔹 Разбор:
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩5👍3❤1
Java предоставляет разработчикам удобные инструменты для сериализации объектов. Несмотря на то, что они кажутся донельзя примитивными, их внутренняя реализация содержит много интересных моментов.
В этой статье мы рассмотрим основы сериализации и некоторые нюансы, связанные с ней. И, конечно, посмотрим, как она работает изнутри.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Recursion vs Iteration: Что выбрать?🗳
Рекурсия и итерация — два способа решения задач. Какой выбрать?
📌 Факториал: Рекурсия vs Итерация
✔️ Рекурсия:
✔️ Итерация:
👍 Разбор:
✔️ Рекурсия удобна для разделяй и властвуй, но может вызвать StackOverflowError.
✔️ Итерация эффективнее по памяти, но иногда менее читаема.
✔️ В Java лучше избегать глубоких рекурсий из-за ограниченного стека.
💡 Запомни:
✔️ Рекурсия = удобство, но риск StackOverflowError.
✔️ Итерация = производительность и безопасность.
📍 Теги: #java #recursion #iteration #performance #bestpractices
Рекурсия и итерация — два способа решения задач. Какой выбрать?
public static int factorialRecursive(int n) {
return (n == 1) ? 1 : n * factorialRecursive(n - 1);
}public static int factorialIterative(int n) {
int result = 1;
for (int i = 2; i <= n; i++) {
result *= i;
}
return result;
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🤔3
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥14😭12❤4
Media is too big
VIEW IN TELEGRAM
В этом видеокурсе автор пошагово и простым языком ознакомит вас с важными концепциями языка Java.
Преподаватель на практике показывает — как, что и зачем делать, прямо в редакторе кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🤔3🔥1
В Java строки (String) сравниваются не через ==, а с equals(), иначе возможны ошибки.
public class StringComparison {
public static void main(String[] args) {
String s1 = "hello";
String s2 = new String("hello");
System.out.println(s1 == s2); // ❌ false (сравнение ссылок)
System.out.println(s1.equals(s2)); // ✅ true (сравнение значений)
}
}if (s1.equals(s2)) {
System.out.println("Строки равны ");
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🤯3❤2
Ошибка: ConcurrentModificationException при итерации по списку.
При изменении ArrayList во время итерации можно получить ConcurrentModificationException.
❌ Ошибка:
👍 Разбор:
✔️ ArrayList использует модификационный счётчик, который ломается при изменении коллекции во время итерации.
✔️ for-each использует Iterator, который не поддерживает удаление элементов во время итерации.
✔️ Правильный вариант 1: Использовать Iterator.remove()
✔️ Правильный вариант 2: Использовать removeIf()
💡 Запомни:
✔️ for-each нельзя использовать для удаления элементов.
✔️ Используй Iterator.remove() или removeIf().
❓ А вы знали об этом?
📍 Теги: #java #concurrentmodification #collections #mistakes #bestpractices
При изменении ArrayList во время итерации можно получить ConcurrentModificationException.
❌ Ошибка:
import java.util.*;
public class ConcurrentModExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(List.of(1, 2, 3, 4, 5));
for (Integer num : numbers) {
if (num % 2 == 0) {
numbers.remove(num); // ❌ ConcurrentModificationException
}
}
}
}
Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
if (iterator.next() % 2 == 0) {
iterator.remove(); // Работает корректно
}
}
numbers.removeIf(n -> n % 2 == 0); // Удаляет без исключений
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤7👍5😭1
Ошибка: Автоупаковка (Autoboxing) и производительность.
В Java Integer, Double и другие обёртки примитивов (wrapper classes) используют автоупаковку (autoboxing), которая может снижать производительность.
❌ Ошибка:
Проблема:
🚨 На каждой итерации создаётся новый объект Integer, что замедляет программу!
✔️ Правильный вариант:
👍 Разбор:
✔️ Автоупаковка создаёт новые объекты, что увеличивает потребление памяти и замедляет код.
✔️ Используй примитивные типы (int, double) там, где не нужна обёртка.
💡 Запомни:
✔️ int быстрее, чем Integer.
✔️ Избегай ненужной автоупаковки в циклах.
❓ А вы знали об этом?
📍 Теги: #java #autoboxing #performance #mistakes #bestpractices
В Java Integer, Double и другие обёртки примитивов (wrapper classes) используют автоупаковку (autoboxing), которая может снижать производительность.
❌ Ошибка:
public class AutoboxingExample {
public static void main(String[] args) {
Integer sum = 0; // ❌ Используем обёртку вместо int
for (int i = 0; i < 1_000_000; i++) {
sum += i; // ❌ Автоупаковка на каждой итерации (int → Integer)
}
System.out.println(sum);
}
}Проблема:
int sum = 0; // Используем int
for (int i = 0; i < 1_000_000; i++) {
sum += i;
}
System.out.println(sum);
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤5
Please open Telegram to view this post
VIEW IN TELEGRAM
😁35😭5😎4❤1
Дан массив целых чисел и целевое число target. Нужно найти два числа, сумма которых равна target, и вернуть их индексы.
Гарантируется, что решение всегда существует.
Input: nums = [2, 7, 11, 15], target = 9
Output: [0, 1] // (2 + 7 = 9)
Input: nums = [3, 2, 4], target = 6
Output: [1, 2] // (2 + 4 = 6)
import java.util.HashMap;
import java.util.Map;
public class TwoSum {
public static int[] findTwoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[]{map.get(complement), i};
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("Решение не найдено");
}
public static void main(String[] args) {
int[] nums = {2, 7, 11, 15};
int target = 9;
int[] result = findTwoSum(nums, target);
System.out.println("[" + result[0] + ", " + result[1] + "]");
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3
🔥12
Ошибка
public class StringComparison {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println(str1 == str2); // ✅ true (оба строки из пула строк)
System.out.println(str1 == str3); // ❌ false (разные объекты в памяти)
}
}Что произошло
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍5❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣18😁12🤔6🤯1😭1
Добрый вечер, дорогие подписчики!
Как вам наша новая рубрика Викторина? Нравится ли вам такой формат? Хотели бы видеть её чаще? Делитесь своими впечатлениями в комментариях – нам важно ваше мнение!
Как вам наша новая рубрика Викторина? Нравится ли вам такой формат? Хотели бы видеть её чаще? Делитесь своими впечатлениями в комментариях – нам важно ваше мнение!
👍65❤6🔥4🤔1🤓1
В Java Optional помогает избежать NullPointerException. Давай разберём, как его использовать!
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
Optional<String> optionalValue = getValue();
// ✅ Правильное использование Optional
String result = optionalValue.orElse("Значение по умолчанию");
System.out.println(result);
}
public static Optional<String> getValue() {
return Optional.ofNullable(null); // Имитация возможного null
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍7❤3
В Java изменение списка (List) внутри for-each приведёт к ConcurrentModificationException. Давай разберёмся, как правильно удалять элементы!
import java.util.*;
public class ForEachModification {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
for (Integer num : numbers) {
if (num % 2 == 0) {
numbers.remove(num); // ❌ ConcurrentModificationException
}
}
System.out.println(numbers);
}
}
Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
if (iterator.next() % 2 == 0) {
iterator.remove(); // Правильный способ удаления
}
}
numbers.removeIf(n -> n % 2 == 0); // Удаление без исключений
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🤔4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29❤3🤓2
☕️ Почему нет достойных форматтеров кода для Java?
Форматирование кода в Java — вечная головная боль разработчиков. Существует множество инструментов, но у каждого есть свои недостатки. Почему до сих пор не появилось идеального решения?
В статье разбираем популярные форматтеры кода и обсуждаем, есть ли в Java-экосистеме инструмент, который действительно можно назвать идеальным.
⛓ Читать статью
➡️ Easy Java | #статья
Форматирование кода в Java — вечная головная боль разработчиков. Существует множество инструментов, но у каждого есть свои недостатки. Почему до сих пор не появилось идеального решения?
В статье разбираем популярные форматтеры кода и обсуждаем, есть ли в Java-экосистеме инструмент, который действительно можно назвать идеальным.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3