定义数据类的集合

时间:2018-03-10 12:17:21

标签: kotlin

如果我有以下数据类

data class User(val name: String = "", val age: Int = 0)

如何定义它的集合,例如:

var user = User [] // this is not working

我需要能够通过以下方式致电用户:

user[0].name // something like this!

2 个答案:

答案 0 :(得分:1)

以不同方式在Kotlin中定义List集合:

  • 具有不可变(只读)列表的不可变变量:

    val users: List<User> = listOf( User("Tom", 32), User("John", 64) )
    


  • 具有可变列表的不可变变量:

    val users: MutableList<User> = mutableListOf( User("Tom", 32), User("John", 64) )
    

    或没有初始值 - 空列表且没有显式变量类型:

    val users = mutableListOf<User>()
    //or
    val users = ArrayList<User>()
    
    • 您可以将项目添加到列表中:
      • users.add(anohterUser)
      • users += anotherUser(在引擎盖下users.add(anohterUser)


  • 具有不可变列表的可变变量:

    var users: List<User> = listOf( User("Tom", 32), User("John", 64) )
    

    或没有初始值 - 空列表且没有显式变量类型:

    var users = emptyList<User>()
    
    • 注意:您可以将*项添加到列表中:
      • users += anotherUser - *它创建新的ArrayList并将其分配给users


  • 具有可变列表的可变变量:

    var users: MutableList<User> = mutableListOf( User("Tom", 32), User("John", 64) )
    

    或没有初始值 - 空列表且没有显式变量类型:

    var users = emptyList<User>().toMutableList()
    //or
    var users = ArrayList<User>()
    
    • 注意:您可以将项目添加到列表中:
      • users.add(anohterUser)
      • 但未使用users += anotherUser
          

        错误:Kotlin:分配操作员歧义:
          public operator fun Collection.plus(element:String):在kotlin.collections中定义的列表
          @InlineOnly public inline operator fun MutableCollection.plusAssign(element:String):在kotlin.collections中定义的单位


也可以看看: https://kotlinlang.org/docs/reference/collections.html

答案 1 :(得分:0)

你在Kotlin这样做:

val array = arrayOf(User("name1"), User("name2"))

如果要立即创建阵列而不添加元素,请使用

val arrayList = ArrayList<User>()

在这种情况下,你必须明确指定元素类型,因为没有什么可以推断它。

来自ArrayList docu

  

提供一个MutableList实现,它使用了一个   可调整大小的数组作为其后备存储