List 如何在Kotlin中并行迭代两个列表?
如何在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
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) }
}