android Kotlin中map和mapTo有什么区别?

yqlxgs2m  于 2023-06-04  发布在  Android
关注(0)|答案(2)|浏览(224)

我正在尝试理解Kotlin中map和mapTo之间的区别。用几个例子说明有什么区别?

4dc9hkyq

4dc9hkyq1#

map在内部创建一个新的列表,并将其结果放入该列表中,然后返回该列表:

val mapResult = listOf(1, 2, 3).map { it * 2 } // you get a new list instance returned

如果使用mapTo,则可以通过提供自己的列表作为第一个参数来指定放置Map元素的目标:

val myList = ArrayList<Int>()
val mapToResult = listOf(1, 2, 3).mapTo(myList) { it * 2 }

如果提供给你的列表中已经有了元素,那么这些元素将被保留,新的元素将被添加到这些元素中。为方便起见,它还返回目的地列表。

42fyovps

42fyovps2#

**map:**map可以转换你的数据(List),可以返回完整的修改列表或者模型变量的List,例如:

你有一个模型:

data class Student(var id:String, var name:String, var className:String)

现在从arrayOfStudent,我们希望所有学生的名字都是大写字母,所以像这样应用map:

val listOfNamesInCapitalLetters= arrStudent.map {
            it.name= it.name.toUpperCase()
        }
Log.d("map_test", "student's name: $listOfNamesInCapitalLetters")

输出将是:

[AMIT, VIJAY, SUMIT, KARAN, SMAEER]

现在,如果你想要整个学生列表,名字用大写字母,className加1,让我们这样做:

val result= arrStudent.map {
            it.name= it.name.toUpperCase()       // transforming name to upper case
            it.className=it.className+1          // increasing class by 1
            it           // <- Note that we return it, because list will be prepared of the object which is returned by last statement of map
        }

Log.d("modified_list", result.toString())

输出将是:

[Student(id=1, name=AMIT, className=6), Student(id=2, name=VIJAY, className=7), Student(id=3, name=KARAN, className=8), Student(id=4, name=VIRAT, className=9), Student(id=5, name=SAM, className=10)]

mapTo:如果你想把你的列表转换成一个不同类型的列表,那么使用mapTo,例如,我们有一个不同的数据类,名为:CompactStudent

data class CompactStudent(val id:String, val name:String)

现在,如果我们想将List转换为List,请注意CompactStudent包含idname,但与Student模型相比,没有className,所以要做到这一点:

val arrayList=ArrayList<CompactStudent>()

        arrStudent.mapTo(arrayList){
            CompactStudent(it.id,it.name)
        }
Log.d("studentCompact", arrayList.toString())

输出将是:

[StudentCompct(id=1, name=AMIT), StudentCompct(id=2, name=VIJAY), StudentCompct(id=3, name=KARAN), StudentCompct(id=4, name=VIRAT), StudentCompct(id=5, name=SAM)]

相关问题