Допустим, есть список товаров, и нужно найти позицию с максимальной ценой.
Создадим простую модель:
record Product(String name, BigDecimal price) {}Подготовим данные:
List<Product> products = List.of(
new Product("Keyboard", new BigDecimal("79.99")),
new Product("Mouse", new BigDecimal("39.99")),
new Product("Monitor", new BigDecimal("249.99"))
);
Можно пройтись циклом и вручную хранить текущий максимум:
Product top = products.get(0);
for (Product product : products) {
if (product.price().compareTo(top.price()) > 0) {
top = product;
}
}
Но через Stream API это можно сделать короче:
Optional<Product> top = products.stream()
.max(Comparator.comparing(Product::price));
Comparator.comparing(Product::price) говорит Java сравнивать товары по цене.А
max() возвращает Optional, потому что список может быть пустым.Поэтому результат лучше обработать явно:
Product product = top.orElseThrow();
Такой подход удобно использовать для товаров, заказов, рейтингов, зарплат, статистики и любых списков, где нужно найти максимальный объект по конкретному полю.
👉 Java Ready | #практика