【问题标题】:Getting the elements from a list of lists with the Java Stream API in Kotlin使用 Kotlin 中的 Java Stream API 从列表列表中获取元素
【发布时间】:2017-07-31 07:34:24
【问题描述】:

以下代码(用 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;

【问题讨论】:

  • 为什么需要 Java Streams? Kotlin API 绰绰有余

标签: list java-8 kotlin java-stream


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以flatMap每个列表:

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

    【讨论】:

      【解决方案3】:

      使用平面地图

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-04
        • 2020-08-30
        • 2017-09-26
        • 1970-01-01
        • 2018-07-08
        相关资源
        最近更新 更多