【问题标题】:Kotlin - Create new list with list(s) as argument using listOf()Kotlin - 使用 listOf() 创建以列表为参数的新列表
【发布时间】:2020-05-20 20:36:48
【问题描述】:

我想从一个或多个列表、地图或其他集合创建列表、地图或其他集合。

在 dart 中,您使用以下语法生成一个或多个列表的列表:

List<int> l1 = [1, 2];
List<int> l2 = [3, 4, 5];
List<int> result = [...l1, ...l2];
//result == [1, 2, 3, 4, 5]

在 Kotlin 中我尝试做同样的事情:

val l1 : List<Int> = listOf(1, 2)
val l2 : List<Int> = listOf(3, 4, 5)
val result: List<Int> = listOf(l1, l2);
//does not compile

有没有办法像 dart 中的 ... 语法那样展开列表?

【问题讨论】:

  • listOf(l1,l2).flatten()l1 + l2

标签: android list kotlin


【解决方案1】:

在 kotlin 中你可以只使用 l1 + l2。

val list1 = listOf(1, 2, 3, 4)
val list2 = listOf(3, 4, 5)
val list3 = list1 + list2 #[1, 2, 3, 4, 3, 4, 5]

另外,plus 是另一个方便的操作。

【讨论】:

  • 技术上plus+ 完全一样,因为plus 被定义为operator fun。如果您明确调用plus,事情可能会变得不清楚。示例:尝试运行-1.plus(2),结果会让您大吃一惊:-) 该行的实际正确形式是(-1).plus(2)-1 + 2
【解决方案2】:

有很多方法可以做到这一点!正如以前的答案所建议的那样。 但在 Kotlin 列表中不存在与 ... 完全相同的行为。

但是您可以使用*(数组扩展运算符)扩展数组。

例如,如果您有:

val array1 = arrayOf(1, 2, 3)
val array2 = arrayOf(4, 5, 6)
val array1AndArray2 = arrayOf(*array1, *array2)

array1AndArray2 的结果将是 arrayOf(1, 2, 3, 4, 5, 6)

但据我所知,列表不支持这种行为

更多信息请查看:https://kotlinlang.org/docs/reference/functions.html

【讨论】:

    【解决方案3】:

    你可以使用:

    val result: List<Int> = l1.plus(l2)
    

    【讨论】:

    • 他可以使用很多东西,但你没有给出他为什么要使用它的理由。
    猜你喜欢
    • 2015-08-30
    • 2021-02-17
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2012-09-27
    • 1970-01-01
    相关资源
    最近更新 更多