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.

Filtrar una lista dentro de la función forEach de otra lista – Kotlin

Estoy intentando filtrar una lista y devolverla dentro de la función map de otra lista.

val userChoiceCategories = recommendedCategoryDb.find(RecommendedCategory::userId eq userId).toList()

userChoiceCategories.forEach {
    //
    return articleDb.find().toList()
        .filter { article ->
            article.category != it.category.name
        }
}

return listOf()

Quiero mostrar artículos de todas las demás categorías excepto la que el usuario haya seleccionado para mostrar en la página de exploración. El bucle forEach parece que solo funciona para el primer elemento de la lista y se detiene. ¿Alguna aclaración de dónde me estoy equivocando?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la instrucción return dentro del bucle forEach está provocando que la función se salga después de la primera iteración.

    Para solucionar esto, puedes usar flatMap en lugar de forEach para transformar cada objeto RecommendedCategory en una lista de artículos que no pertenezcan a su categoría. Luego, puedes usar flatten para combinar todas esas listas en una sola lista de artículos para retornar.

    Aquí tienes una versión actualizada del código:

    val userChoiceCategories = recommendedCategoryDb.find(RecommendedCategory::userId eq userId).toList()
    
    val articles = userChoiceCategories.flatMap { category ->
        articleDb.find().toList().filter { article ->
            article.category != category.category.name
        }
    }
    
    return articles.flatten()
    

    Esto debería darte una lista de todos los artículos excepto aquellos que pertenezcan a las categorías seleccionadas por el usuario.

Comments are closed.