2017-07-31 107 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()將流元素收集到列表中。