Ответ
В автотестах на Java я часто использую Stream API для обработки и проверки коллекций данных, что делает код более декларативным и читаемым.
Основные сценарии применения:
- Фильтрация и поиск элементов в результатах проверок.
// Проверка, что в списке пользователей есть хотя бы один активный администратор List<User> allUsers = userRepository.findAll(); boolean hasActiveAdmin = allUsers.stream() .filter(u -> u.getRole().equals(Role.ADMIN)) .anyMatch(User::isActive); assertTrue("Should have at least one active admin", hasActiveAdmin); - Сравнение коллекций, игнорируя порядок или преобразуя элементы.
// Получаем список ID заказов из API-ответа и сравниваем с ожидаемым множеством List<OrderDto> orders = apiClient.getOrders(); Set<Long> actualOrderIds = orders.stream() .map(OrderDto::getId) .collect(Collectors.toSet()); assertEquals(expectedOrderIds, actualOrderIds); - Агрегация данных для составных проверок.
// Проверка общей суммы товаров в корзине List<CartItem> items = getCartItems(); BigDecimal totalPrice = items.stream() .map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity()))) .reduce(BigDecimal.ZERO, BigDecimal::add); assertThat(totalPrice).isEqualByComparingTo("199.99"); - Группировка элементов для более сложных assertions.
// Проверяем, что у каждого пользователя корректное количество связанных записей Map<String, Long> postsPerUser = blogPosts.stream() .collect(Collectors.groupingBy(Post::getAuthorEmail, Collectors.counting())); postsPerUser.forEach((email, count) -> { assertThat(count).as("Post count for " + email).isLessThanOrEqualTo(MAX_POSTS_PER_USER); });Stream API позволяет писать компактные и выразительные проверки, особенно когда нужно обработать результаты запросов к API или БД перед assertion.