Rafel C.F
Rafel C.F

Reputation: 179

Kotlin Sort two lists by one item

[![enter image description here][1]][1]How can I sort locales and visitantes per minute if I am using sealed class

The Model

sealed class Item {
    class ItemOne(var idJugador: String = "", var nombre: String = "", var minuto: String = "", var tarjeta: String) : Item()

    class ItemTwo(var idJugador: String = "", var nombre: String = "", var minuto: String = "", var tarjeta: String) : Item()
}

This is Adapter

    class DetallesAdapter(
        private val locales: ArrayList<Item>? = ArrayList(),
        private val visitantes: ArrayList<Item>? = ArrayList()
    ) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

        //val itemTotal = ArrayList<Item.ItemOne>().sortedBy {it.minuto} + ArrayList<Item.ItemTwo>().sortedBy {it.minuto}

        val itemTotal = locales!! + visitantes!!

        override fun getItemCount(): Int = itemTotal.size
........
}

Upvotes: 0

Views: 637

Answers (2)

Rafel C.F
Rafel C.F

Reputation: 179

    class DetallesAdapter(
    private val locales: List<Item> = ArrayList(),
    private val visitantes: List<Item> = ArrayList()
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    var context: Context? = null

    val itemTotal = (locales!! + visitantes!!).sortedBy { it.minuto }



    // get the size of the list
    override fun getItemCount(): Int = itemTotal.size
............
}


    sealed class Item {

    abstract var minuto: String

    class GolLocal(var idJugador: String = "", var nombre: String = "",
                   override var minuto: String = "", var tarjeta: String) : Item()

    class GolVisi(var idJugador: String = "", var nombre: String = "",
                  override var minuto: String = "", var tarjeta: String) : Item()
}

Upvotes: 0

Andrei Tanana
Andrei Tanana

Reputation: 8422

You can declare minuto property in Item class and then just use sortedBy:

sealed class Item {
    abstract var minuto: String

    class ItemOne(var idJugador: String = "", var nombre: String = "", override var minuto: String = "", var tarjeta: String) : Item()

    class ItemTwo(var idJugador: String = "", var nombre: String = "", override var minuto: String = "", var tarjeta: String) : Item()
}

...

val itemTotal = (locales!! + visitantes!!).sortedBy { it.minuto }

Upvotes: 2

Related Questions