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

时间:2017-07-31 07:34:25

标签: list java-8 kotlin java-stream

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

使用java stream 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;

3 个答案:

答案 0 :(得分:14)

在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())

答案 1 :(得分:8)

你可以flatMap每个列表:

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

答案 2 :(得分:1)

使用flatMap

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

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