J
Java-разработчик
@iamjavadev17 подп.
36просмотров
19 января 2026 г.
statsScore: 40
🎭 Stream API: 3 неочевидных приёма, которые упростят ваш код Все знают filter() и map(), но Stream API гораздо богаче! ✈️ 1. Take/Drop While (Java 9+) — умная фильтрация: // Раньше: сложная логика с флагами List<Integer> numbers = List.of(1, 2, 3, -1, 4, 5); // Взять элементы, пока условие истинно numbers.stream() .takeWhile(n -> n > 0) // [1, 2, 3] .forEach(System.out::println); // Пропустить элементы, пока условие истинно numbers.stream() .dropWhile(n -> n > 0) // [-1, 4, 5] .forEach(System.out::println); ✈️ 2. Теггирование (разделение на категории): Map<Boolean, List<User>> partitioned = users.stream() .collect(Collectors.partitioningBy(User::isActive)); // {true=[активные], false=[неактивные]} Map<Department, List<User>> grouped = users.stream() .collect(Collectors.groupingBy(User::getDepartment)); ✈️ 3. Сворачивание (folding) с reduce: // Не только сумма! Любая агрегация String concatenated = strings.stream() .reduce("", (s1, s2) -> s1 + ", " + s2); // Более эффективно с collect String concatenated = strings.stream() .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append) .toString(); // Максимальное значение с дефолтом Optional<Integer> max = numbers.stream() .reduce(Integer::max); 💎 Бонус: Custom Collector для сложной логики: Collector<User, ?, Map<String, Double>> avgSalaryByDept = Collectors.groupingBy( User::getDepartment, Collectors.averagingDouble(User::getSalary) ); 📌 Итог: Изучите полный java.util.stream.Collectors — там десятки полезных коллекторов для статистики, группировок и трансформаций. ✈️Подписаться: @iamjavadev #stream #java9 #функциональное #лайфхаки
36
просмотров
1726
символов
Нет
эмодзи
Нет
медиа

Другие посты @iamjavadev

Все посты канала →
🎭 Stream API: 3 неочевидных приёма, которые упростят ваш ко — @iamjavadev | PostSniper