KotlinでのArrayListのArrayListの作成中にバインドされた例外のうちインデックス

Devrath:

私は何をしようとしています:

  • 私は3人の生徒のリストを持っています
  • (最初のグループは2人の学生を持つことになりますと、第2のグループは一人の学生を持っていますので)私は彼らの間でグループを作成しようとしています

ここでは、コードは次のようになります。

FragDispGroupBlocksVM.kt

class FragDispGroupBlocksVM @Inject constructor() : ViewModel() {

    private var mStudentList: MutableList<StudentModel> = ArrayList()


    constructor(studentList: MutableList<StudentModel>) : this(){
        mStudentList = studentList
        initStudentGroups()
    }

    fun initStudentGroups() {

        var mStudLstPartn : ArrayList<ArrayList<StudentModel>> = ArrayList()


        var partitionedList = GroupingUtils.partitionIntoSubGroups(mStudentList,2)

        val mList = partitionedList.filterIsInstance<ArrayList<ArrayList<StudentModel>>>()

        mList.forEachIndexed{i,element ->
            mStudLstPartn.add(element[i])
        }



        // mPartitionedList.postValue(mList);
        Timber.i("")
    }

}

GroupingUtils.kt

class GroupingUtils {
    companion object {
        fun <T> partitionIntoSubGroups(
            members: Collection<T>,
            maxSize: Int
        ): MutableList<List<T>> {
            val res: MutableList<List<T>> = ArrayList()
            var internal: MutableList<T> = ArrayList()
            for (member in members) {
                internal.add(member)
                if (internal.size == maxSize) {
                    res.add(internal)
                    internal = ArrayList()
                }
            }
            if (internal.isNotEmpty()) {
                res.add(internal)
            }
            return res
        }
    }
}

StudentModel.kt

data class StudentModel(
    @SerializedName("role")
    val role: String,
    @SerializedName("_id")
    val id: String,
    @SerializedName("firstName")
    val firstName: String,
    @SerializedName("lastName")
    val lastName: String,
    @SerializedName("kneuraId")
    val kneuraId: String,
    @SerializedName("email")
    val email: String,
    var isPresent: Boolean = true
): Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readString(),
        parcel.readByte() != 0.toByte()
    )

    override fun writeToParcel(dest: Parcel?, flags: Int) {
        dest!!.writeString(role)
        dest.writeString(id)
        dest.writeString(firstName)
        dest.writeString(lastName)
        dest.writeString(kneuraId)
        dest.writeString(email)
        dest.writeByte(if (isPresent) 1 else 0)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<StudentModel> {
        override fun createFromParcel(parcel: Parcel): StudentModel {
            return StudentModel(parcel)
        }

        override fun newArray(size: Int): Array<StudentModel?> {
            return arrayOfNulls(size)
        }
    }
}

何が起こっている ::

下の行は、3つの要素を有します

private var mStudentList: MutableList<StudentModel> = ArrayList()

それはラインまで働いています

val mList = partitionedList.filterIsInstance<ArrayList<ArrayList<StudentModel>>>()

これは、2回目の繰り返しのループの下のラインにクラッシュします

 mList.forEachIndexed{i,element ->
            mStudLstPartn.add(element[i])
        }

ログ:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.get(ArrayList.java:437)
        at com.cnx.project.grouping.viewModels.FragDispGroupBlocksVM.initStudentGroups(FragDispGroupBlocksVM.kt:30)

質問:

  • なぜバウンド例外のうち、インデックスがあります
  • Javaのと類似のArrayListの配列リストを作成する方法
  • エラーを解決する方法

[編集]

私は2つの要素を持っています ここでは、画像の説明を入力します。

プリモジュ食堂:

私は、エラーが発生したところ、これがあると仮定します。

    mList.forEachIndexed { i, element ->
        mStudLstPartn.add(element[i])
    }

あなたは繰り返し処理されmListますが、からインデックスを使用しているmListからアクセス項目へelement

あなたは持っているmListこのように[[a, b], [c]]、とてもその要素は、これらは以下のとおりです。

インデックス0: [a, b]

インデックス1: [c]

あなたの場合はforEachIndexed二度目の繰り返し処理は、element唯一の(ある一つの項目があるcインデックスに0を)しますが、アクセスしようとelement[1]当然のことながら、スロー、IndexOutOfBoundsException何の第二の要素が存在しないため。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=34141&siteId=1