← Назад к вопросам

Что используешь чаще всего от Stream API

1.0 Junior🔥 271 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Чаще всего используемые операции Stream API

В повседневной разработке на Java я использую Stream API постоянно. Это один из самых мощных инструментов, введённых в Java 8, который позволяет писать более выразительный и функциональный код для работы с коллекциями.

Самые частые операции

1. map() — самая используемая операция. Преобразует каждый элемент потока в другой элемент:

List<String> names = users.stream()
    .map(User::getName)
    .collect(Collectors.toList());

List<Integer> ages = employees.stream()
    .map(Employee::getAge)
    .collect(Collectors.toList());

2. filter() — отбирает элементы, удовлетворяющие условию. Вторая по частоте использования операция:

List<User> adults = users.stream()
    .filter(user -> user.getAge() >= 18)
    .collect(Collectors.toList());

List<Order> activeOrders = orders.stream()
    .filter(order -> order.isActive())
    .collect(Collectors.toList());

3. collect() — завершающая операция, собирает результаты в коллекцию. Чаще всего использую Collectors.toList(), но также часто toSet(), toMap() и groupingBy():

List<String> result = items.stream()
    .map(Item::getName)
    .collect(Collectors.toList());

Map<String, Long> countByCategory = products.stream()
    .collect(Collectors.groupingBy(
        Product::getCategory,
        Collectors.counting()
    ));

4. forEach() — применяет действие к каждому элементу. Используется реже, чем другие операции, но нужна для побочных эффектов:

users.stream()
    .filter(user -> user.isActive())
    .forEach(user -> sendEmail(user));

5. findFirst() и findAny() — получают первый элемент (или любой в параллельных потоках). Часто используется с orElse() или orElseThrow():

User firstAdmin = users.stream()
    .filter(user -> user.isAdmin())
    .findFirst()
    .orElseThrow(() -> new AdminNotFoundException());

Комбинирование операций

Обычно я использую несколько операций вместе в одной цепочке:

List<String> topActiveUserNames = users.stream()
    .filter(user -> user.isActive())
    .sorted(Comparator.comparing(User::getLastLogin).reversed())
    .limit(10)
    .map(User::getName)
    .collect(Collectors.toList());

Почему Stream API популярен

  • Декларативный стиль — описываешь ЧТО делать, а не КАК
  • Лаконичность — меньше кода, больше читаемости
  • Параллелизм.parallel() автоматически распределяет обработку
  • Ленивые вычисления — промежуточные операции не выполняются до завершающей операции

Эти операции стали стандартом в современной Java-разработке и есть почти в каждом проекте.

Что используешь чаще всего от Stream API | PrepBro