#java #spring-webflux #project-reactor
#Ява #пружинный вебфлюкс #проект-реактор
Вопрос:
Мне нужно проверить, содержится ли подстрока в названии магазина или акций в этом магазине.
@Override public Fluxlt;Shopgt; searchShopsBySearchingTextInShopsAndStocks(String searchText) { // I received Flxuxlt;Listlt;Shopgt;gt; return shopRepo.findAll(). // next I check if substring in title of shop filter(shop -gt; { if (shop.getTitle().contains(searchText) || shop.getDescription().contains(searchText)) { // if contains then return TRUE if not check in stocks return true; } else { // reeived all stock Fluxlt;Listlt;Stockgt;gt; of this shop and check return stockService.findStocksByShopId(shop.getId()). flatMap(stock -gt; { if (stock.getDescription().contains(searchText) || stock.getTitle().contains(searchText)) { // and in this place I need help return // true } return //false }); }); }
При проверке содержимого подстроки в запасах мне достаточно одного вхождения.
Ответ №1:
Глядя на Flux#filter
подпись оператора:
Fluxlt;Tgt; filter(Predicatelt;? super Tgt; p)
мы видим, что он принимает простой предикат Java в качестве параметра. В нем нельзя выполнять асинхронные операции.
Вместо этого вы можете использовать filterWhen
оператор:
shopRepo.findAll() .filterWhen(shop -gt; (shop condition) ? Mono.just(true) : stockService.findStocksByShopId(shop.getId()) .map(stock -gt; (stock condition)))