← Назад к вопросам
Можно ли посчитать и получить количество элементов в Stream?
1.0 Junior🔥 221 комментариев
#Stream API и функциональное программирование#Основы Java
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Подсчет количества элементов в Stream
Да, можно посчитать и получить количество элементов в Stream, используя метод count(). Это терминальная операция, которая возвращает long значение.
Базовый пример
List<String> words = Arrays.asList("Java", "Stream", "API", "counting");
long count = words.stream().count();
System.out.println("Количество элементов: " + count); // 4
С фильтрацией
Очень часто нужно посчитать элементы, которые соответствуют определённому условию:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Посчитать чётные числа
long evenCount = numbers.stream()
.filter(n -> n % 2 == 0)
.count();
System.out.println("Чётные числа: " + evenCount); // 5
Альтернатива через Collectors.counting()
Для более сложных сценариев можно использовать Collectors.counting():
List<String> fruits = Arrays.asList("Apple", "Banana", "Apple", "Orange", "Banana", "Apple");
// Подсчёт всех элементов
long total = fruits.stream()
.collect(Collectors.counting());
System.out.println("Всего: " + total); // 6
// Подсчёт по группам
Map<String, Long> groupCount = fruits.stream()
.collect(Collectors.groupingBy(
Function.identity(),
Collectors.counting()
));
System.out.println(groupCount);
// {Apple=3, Banana=2, Orange=1}
Важные особенности
- Stream одноразовый: после вызова
count()Stream закрывается и повторно использовать его нельзя.
Stream<Integer> stream = numbers.stream();
long cnt = stream.count();
stream.count(); // IllegalStateException!
- Производительность: если Stream бесконечный,
count()никогда не вернёт результат:
// Это зависнет!
Stream.iterate(0, n -> n + 1).count();
- Сравнение с Collection.size(): если у вас есть Collection, лучше использовать
size()напрямую:
List<String> list = Arrays.asList("a", "b", "c");
int size = list.size(); // Предпочтительнее
long streamCount = list.stream().count(); // Медленнее
Практический пример
List<Employee> employees = ...; // Список сотрудников
// Подсчитать сотрудников с зарплатой больше 100000
long highEarners = employees.stream()
.filter(emp -> emp.getSalary() > 100000)
.count();
System.out.println("Сотрудников с зарплатой > 100000: " + highEarners);
Вывод: count() — это удобный и читаемый способ получить количество элементов в Stream. Для простого подсчёта используйте его, для более сложной группировки и статистики — Collectors.counting() и другие collectors.