es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo filtrar Flux de forma asíncrona

Necesito verificar si una subcadena está contenida en el título de la tienda o existencias en esta tienda.

@ Override
public Flux searchShopsBySearchingTextInShopsAndStocks (String searchText) {

// Recibí Flxux & lt; List & lt; Shop & gt; & gt;
return shopRepo.findAll ().
// luego verifico si la subcadena está en el título de la tienda
filtro(tiendatienda- & gt; {
if (shop.getTitle (). Contains (searchText) || shop.getDescription (). Contains (searchText)) {

                   // si contiene, entonces devuelve TRUE si no lo verifica en los stocks
                    return true;
                } más {
                             // recibí todo el stocks Flux & lt; List & lt; Stock & gt; & gt; de esta tienda y compruebe
                      return stockService.findStocksByShopId (shop.getId ().
                            flatMap(stock - & gt; {
                                if (stock.getDescription (). Contains (searchText) || stock.getTitle (). Contains (searchText)) {

       // y en este lugar necesito ayuda

                                    devuelve  // verdadero
                                }

                                devuelve  / /falso 
                            });

      });

}

Cuando verifique el contenido de una subcadena en las existencias, me basta con una ocurrencia.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para verificar si una subcadena está contenida en los stocks de una tienda, se puede utilizar el operador flatMap para recuperar todos los stocks de una tienda y luego usar el operador any para verificar si alguno de los stocks contiene la subcadena. Aquí tienes el nuevo fragmento de código:

    @Override
    public Flux<shop> searchShopsBySearchingTextInShopsAndStocks(String searchText) {
    
        return shopRepo.findAll()
            .filter(shop -> {
                if (shop.getTitle().contains(searchText) || shop.getDescription().contains(searchText)) {
                    return true; // subcadena encontrada en el título o la descripción de la tienda
                } else {
                    return stockService.findStocksByShopId(shop.getId())
                        .flatMapIterable(stocks -> stocks)
                        .any(stock -> stock.getDescription().contains(searchText) || stock.getTitle().contains(searchText))
                        .block(); // verificar si algún stock contiene la subcadena
                }
            });
    }
    

    El operador flatMapIterable se usa para convertir Flux<>> en un Flux para que podamos aplicar el operador any a cada stock individual. El método block() se utiliza para esperar el resultado del operador any antes de devolver el resultado final. Con esta implementación, si se encuentra la subcadena en el título de una tienda o en la descripción de un stock, esa tienda se incluirá en el resultado final.

Comments are closed.