使用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()将流元素收集到列表中。