Потоки данных поддерживают метод
limit(n). Он возвращает еще один поток, не превышающий заданную длину, переданную в limit в виде аргумента. Если поток данных упорядоченный, возвращаются первые элементы, но не более чем n. Например, с помощью следующего кода можно создать
List, выбрав первые три блюда, содержащие более 300 калорий:
List<Dish> dishes = specialMenu
.stream()
.filter(dish -> dish.getCalories() > 300)
.limit(3)
.collect(toList());
Метод
limit работает и для неупорядоченных потоков данных (например, когда источник представляет собой объект типа Set). В этом случае не следует исходить из допущения о какой-либо упорядоченности результата, возвращенного методом limit.#java #stream #limit
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝3👍2
@Cacheable — быстро и просто в SpringКогда метод тяжёлый (долго считает, лезет в БД или API) — зачем вызывать его 100 раз, если результат тот же?
Решение: кеш. В Spring это делается одной аннотацией.
@Cacheable?Она сохраняет результат метода в кеш.
При повторном вызове с теми же аргументами — возвращает значение из кеша, не запуская метод снова.
@Cacheable("users")
public User getUserById(Long id) {
System.out.println("Fetching from DB...");
return userRepository.findById(id).orElseThrow();
}Первый вызов: метод выполнится → результат кешируется.
Следующие вызовы с тем же
id: результат берётся из кеша.1. Добавь зависимость (если ещё нет):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2. Включи кеш в
@Configuration:@EnableCaching
@SpringBootApplication
public class MyApp { }
Spring по умолчанию использует простой in-memory кеш (ConcurrentHashMap), но можно подключить Caffeine, Redis, Ehcache и т.д.
🎯 Ключ кеша по полям:
@Cacheable(value = "products", key = "#category + ':' + #limit")
public List<Product> getTopProducts(String category, int limit) { ... }
@Cacheable(value = "data", unless = "#result == null")
public Data fetchData(String key) { ... }
@CachePut("users")
public User updateUser(User user) { ... }🧹 Очистка кеша:
@CacheEvict(value = "users", key = "#id")
public void deleteUser(Long id) { ... }
@Cacheable — это «копим и не дёргаем зря».С ним ты ускоряешь работу приложения без лишнего кода, особенно если есть дорогие вызовы (БД, сеть, парсинг).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤5👌3🔥2