如何在Kotlin中并行迭代两个列表



如何在Kotlin中迭代两个列表?我想将一个列表中的每个值分配给另一个列表的等效textview,就像1:1分配一样。

类似以下内容允许并行迭代,但它会执行两次:

data class Total(val area : Double)
private fun assign(
allArea: List<Double>, allTextViews : List<TextView>
) : Total {
var totalArea = 0.0
allArea.forEach { double ->
val value : Double = double
totalArea += value
allTextViews.forEach { textView ->
textView.text = value.toString()
}
}
return Total(totalArea)
}
assign(allStates = listOf(
a,
b
),
allTextViews = listOf(
textView1,
textView2)
)

尝试压缩两个列表:

fun main() {
val list1 = listOf(1,2,3)
val list2 = listOf(4,5,6)
list1.zip(list2).forEach {pair -> 
println(pair.component1() + pair.component2())
}
}

此打印:

5
7
9

在您的情况下,给定allArea列表和allTextViews具有相同的长度,您可以对它们进行压缩,并获得第一个组件类型为Double,第二个组件类型是TextView的对

这里是最‘函数式编程"方式:

fun main() {
val listA = listOf(10, 20, 30)
val listB = listOf(1,2,3)
listA.zip(listB) { a, b -> println(a + b) }
}

一种方法是使用zip运算符使它们成对,但确保它们大小相等。

fun main() {
val listA = listOf("A","B","C")
val listB = listOf(1,2,3)
val zippedList = listA.zip(listB)
//or
val zippedListIterative = listA.zip(listB, {a, b -> "${a} = ${b}"}).toList()
println(zippedList)
}

然后,您可以在lambda函数内部进行转换,或者将其作为列表,然后对其进行迭代

最新更新