从另一个创建列表

时间:2017-04-22 21:06:17

标签: kotlin

假设我在List中有一些值。我想返回另一个带有新元素的列表

fun newList():List<Int>{    
    val values =listOf<Int>(1,2,3,4,5,6);
    return 7::values; // something like that
}

4 个答案:

答案 0 :(得分:5)

Kotlin列表the plus operator已超载in kotlin-stdlib,因此您可以将项目添加到列表中:

val values = listOf(1, 2, 3, 4, 5, 6)
return values + 7

还有一个重载,它会添加另一个列表:

val values = listOf(1, 2, 3, 4, 5, 6)
return listOf(-1, 0) + values + listOf(7, 8)

请注意,在这两种情况下都会创建一个新列表,并将元素复制到其中。

对于MutableList<T>(具有变异功能,与List<T>相比),有一个plusAssign operator implementation,可以按如下方式使用:

fun newList(): List<Int> {    
    val values = mutableListOf(1, 2, 3, 4, 5, 6)
    values += 7
    values += listOf(8, 9)
    return values
}

答案 1 :(得分:2)

使用扩展运算符的不同方法。在某些情况下,可能比使用+符号或mutableListOf

更简单
fun newList(): List<Int>{
    val values = listOf(1,2,3,4,5,6)
    return listOf(7, *values.toTypedArray(), 8, 9)
}

答案 2 :(得分:0)

你可以这样做

fun newList():List<Int>{    
    val values =listOf(1,2,3,4,5,6) //Type can be inferred
    return values.plus(7)
}

答案 3 :(得分:0)

我希望与foryield一样使用Scala。它非常好 - 目前是实验性的 - 协同程序:

fun testYield(max:Int): List<Int> {

    val values = buildSequence{
        for (i in 1..max){
            yield(i)
        }
    }
    return values.toList();
}

或者用更短的方式:

fun testYieldFast(max: Int) = buildSequence {
    for (i in 1..max)
        yield(i)
}.toList();

它允许快速不可变的延迟构造,其中频繁的连接通常在不可变列表中很慢。