使用Kotlin中的Java Stream API获取列表中的元素
问题描述:
以下代码(用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;
答
在科特林它的超级容易,没有任何过多的样板:
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())
答
你可以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()将流元素收集到列表中。
为什么你需要Java Streams? Kotlin API绰绰有余 – voddan