Что я пытаюсь сделать:
- У меня есть список из 3 студентов
- Я пытаюсь создать группу среди них (поэтому сначала в группе будет 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>>>()
Вылетает в строке ниже l oop во второй итерации
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)
Вопросы:
- Почему существует индекс из-за привязанного исключения
- Как сделать список массивов Arraylist похожим на java
- Как устранить ошибку
[Править]
У меня есть 2 элемента ![enter image description here](https://i.stack.imgur.com/A8s9V.png)