👩💻 Что такое Collectors.partitioningBy() и зачем он нужен?
Collectors.partitioningBy() — это коллектор из Java Stream API, который разделяет элементы потока на две группы (true/false) на основе заданного предиката, возвращая Map.
⚡️ Пример:
import java.util.*;
import java.util.stream.*;
import java.util.function.Predicate;
public class PartitioningByExample {
public static void main(String[] args) {
List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Разделение чисел на четные и нечетные
Map partitioned = numbers.stream()
.collect(Collectors.partitioningBy(n -> n % 2 == 0));
System.out.println("Четные: " + partitioned.get(true)); // [2, 4, 6, 8, 10]
System.out.println("Нечетные: " + partitioned.get(false)); // [1, 3, 5, 7, 9]
// Строки по длине
List words = Arrays.asList("яблоко", "груша", "слива", "апельсин", "лимон");
Map byLength = words.stream()
.collect(Collectors.partitioningBy(word -> word.length() > 5));
System.out.println("\nКороткие слова (≤5 букв): " + byLength.get(false));
System.out.println("Длинные слова (>5 букв): " + byLength.get(true));
// С дополнительным коллектором - подсчет количества
Map countPartition = numbers.stream()
.collect(Collectors.partitioningBy(
n -> n > 5,
Collectors.counting()
));
System.out.println("\nЧисел ≤5: " + countPartition.get(false));
System.out.println("Чисел >5: " + countPartition.get(true));
}
}
➡️ Easy Java | #Теория
Collectors.partitioningBy() — это коллектор из Java Stream API, который разделяет элементы потока на две группы (true/false) на основе заданного предиката, возвращая Map.
⚡️ Пример:
import java.util.*;
import java.util.stream.*;
import java.util.function.Predicate;
public class PartitioningByExample {
public static void main(String[] args) {
List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Разделение чисел на четные и нечетные
Map partitioned = numbers.stream()
.collect(Collectors.partitioningBy(n -> n % 2 == 0));
System.out.println("Четные: " + partitioned.get(true)); // [2, 4, 6, 8, 10]
System.out.println("Нечетные: " + partitioned.get(false)); // [1, 3, 5, 7, 9]
// Строки по длине
List words = Arrays.asList("яблоко", "груша", "слива", "апельсин", "лимон");
Map byLength = words.stream()
.collect(Collectors.partitioningBy(word -> word.length() > 5));
System.out.println("\nКороткие слова (≤5 букв): " + byLength.get(false));
System.out.println("Длинные слова (>5 букв): " + byLength.get(true));
// С дополнительным коллектором - подсчет количества
Map countPartition = numbers.stream()
.collect(Collectors.partitioningBy(
n -> n > 5,
Collectors.counting()
));
System.out.println("\nЧисел ≤5: " + countPartition.get(false));
System.out.println("Чисел >5: " + countPartition.get(true));
}
}
👀 Особенно полезен для разделения данных на прошедшие/не прошедшие валидацию, категоризации на успешные/ошибочные операции, статистического анализа.
➡️ Easy Java | #Теория