2017-07-31 33 views
3

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

有没有更好的方式来写java相同的流api? (例子可以在科特林或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; 
+0

为什么你需要Java Streams? Kotlin API绰绰有余 – voddan

回答

6

在科特林它的超级容易,没有任何过多的样板:

val listOfLists: List<List<String>> = listOf() 

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

flatten()是一样的做flatMap { it }


在Java中,你需要利用流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()) 
8

你可以flatMap每个列表:

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

使用flatMap

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

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