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 combinar Flux y Mono

Supongamos que tenemos la siguiente función:

fun getAnnualData(tenant: String): Flux<dashboardresponse> {

    val year = LocalDate.now().year

    val annualExpenses = expenseFinder.sumAllByYearAndTenant(year = year, tenant = tenant)
    val warehouseExpenses = expenseFinder.sumWarehouseByYearAndTenant(year = year, tenant = tenant)
    val annualRevenues = revenueFinder.sumAllByYearAndTenant(year = year, tenant = tenant)

    return annualExpenses.zipWith(annualRevenues)
        .filter { it.t1._id?.year == year }
        .filter { it.t2._id?.year == year }
        .map {
            DashboardResponse(
                period = Period.ANNUAL,
                expenses = it.t1,
                revenue = it.t2
            )
        }
}

y quiero agregar warehouseExpenses al valor de retorno. ¿Cómo puedo hacer eso?

Donde:

  • annualExpenses es un Flux
  • warehouseExpenses es un Mono
  • annualRevenues es un Flux
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para agregar los warehouseExpenses al valor devuelto, podemos usar el operador zip en el Flux de gastos y ingresos anuales con el Mono de los gastos de almacén. Así es como se vería el código modificado:

    fun getAnnualData(tenant: String): Flux<dashboardresponse> {
    
        val year = LocalDate.now().year
    
        val annualExpenses = expenseFinder.sumAllByYearAndTenant(year = year, tenant = tenant)
        val warehouseExpenses = expenseFinder.sumWarehouseByYearAndTenant(year = year, tenant = tenant)
        val annualRevenues = revenueFinder.sumAllByYearAndTenant(year = year, tenant = tenant)
    
        return annualExpenses.zipWith(annualRevenues).zipWith(warehouseExpenses)
            .filter { it.t1.t1._id?.year == year }
            .filter { it.t1.t2._id?.year == year }
            .map {
                DashboardResponse(
                    period = Period.ANNUAL,
                    expenses = it.t1.t1,
                    revenue = it.t1.t2,
                    warehouseExpenses = it.t2
                )
            }
    }
    

    Aquí, agregamos el operador zipWith al Flux de gastos e ingresos anuales con el Mono de gastos de almacén. Esto crea una tupla de la forma ((annualExpenses, annualRevenues), warehouseExpenses). Luego filtramos los resultados según el año y finalmente mapeamos la tupla al objeto DashboardResponse, incluyendo los warehouseExpenses.

Comments are closed.