Obtener los elementos de una list de lists con la API de transmisión de Java en Kotlin

El siguiente código (escrito en Kotlin) extrae los elementos de una list de lists. Funciona, pero parece bastante feo y difícil de leer.

¿Existe alguna forma más agradable de escribir lo mismo con la API de Java api? (Se pueden dar ejemplos en Kotlin o Java)

val listOfLists: List<Any> = ... val outList: MutableList<Any> = mutableListOf() listOfLists.forEach { list -> if (list is ArrayList<*>) list.forEach { l -> outList.add(l) } } return outList; 

En Kotlin es muy fácil sin ningún tipo de repetición excesiva:

 val listOfLists: List<List<String>> = listOf() val flattened: List<String> = listOfLists.flatten() 

flatten() es lo mismo que hacer flatMap { it }


En Java, necesita utilizar Stream API:

 List<String> flattened = listOfLists.stream() .flatMap(List::stream) .collect(Collectors.toList()); 

También puede usar Stream API en Kotlin:

 val flattened: List<String> = listOfLists.stream() .flatMap { it.stream() } .collect(Collectors.toList()) 

Puedes flatMap cada list:

 List<List<Object>> listOfLists = ...; List<Object> flatList = listOfLists.stream().flatMap(List::stream).collect(Collectors.toList()); 

Use flatMap

  List<Integer> extractedList = listOfLists.stream().flatMap(Collection::stream).collect(Collectors.toList()); 

flatMap () crea una secuencia de cada list en listOfLists. collect () recoge los elementos de la secuencia en una list.

  • Lista de sorting basada en el order de otra list
  • Listar files recursivamente en Kotlin
  • ¿Cómo crear una list inmutable en Kotlin que también sea una list inmutable en Java?
  • Kotlin: creación de una list mutable con elementos repetitivos