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
  • Android Spinner getDropDownView repite elementos después de la selección
  • ¿Tiene Kotlin una function de "enumerar" como Python?
  • Kotlin prepone elemento