Что используешь чаще всего от Stream API
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Чаще всего используемые операции 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-разработке и есть почти в каждом проекте.