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

List 如何在Kotlin中并行迭代两个列表?,list,kotlin,List,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 a

如何在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)
)
数据类总计(val区域:双精度)
私人娱乐分配(
allArea:List,AllTextView:List
):总计{
var totalArea=0.0
allArea.forEach{double->
val值:双精度=双精度
总面积+=值
AllTextView.forEach{textView->
textView.text=value.toString()
}
}
返回总面积(总面积)
}
分配(所有状态=列表状态)(
A.
B
),
allTextViews=listOf(
文本视图1,
文本视图2)
)

一种方法是使用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函数中进行转换,或者将其作为列表,然后对其进行迭代。

尝试压缩两个列表:

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

在您的情况下,如果
allrea
列表和
alltextview
具有相同的长度,您可以对它们进行压缩,并获得一对组件,其中第一个组件的类型为
Double
,第二个组件的类型为
TextView
,以下是最“功能性编程”的方式:


它的可读性将更高。
{(a,b)->println(a+b)}
它的工作原理是一样的:
list1.zip(list2){it1,it2->println(it1+it2)}
。如您所见,不需要forEach。
fun main() {
    val listA = listOf(10, 20, 30)
    val listB = listOf(1,2,3)
    listA.zip(listB) { a, b -> println(a + b) }
}