Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Усечение потока данных. Метод limit

Потоки данных поддерживают метод 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) { ... }


⛔️ Пропуск кеша при null:

@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
👍155👌3🔥2