使用Kotlin中的Java Stream API获取列表中的元素

以下代码(用Kotlin编写)从列表中提取元素。 它工作,但看起来相当丑陋,难以阅读。

有没有更好的方法来写入与Java流API相同? (例子可以在Kotlin或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; 

在Kotlin中,超级简单,没有任何过多的样板:

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

flatten()flatMap { it }


在Java中,您需要使用Stream API:

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

您也可以在Kotlin中使用Stream API:

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

你可以flatMap每个列表:

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

使用flatMap

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

flatMap()从listOfLists中的每个列表中创建一个流。 collect()将流元素收集到列表中。