Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sorting ArrayList in Kotlin

I have an ArrayList of ArrayList what I want to achieve is, to sort them in descending order (based on the Highest to lowest List size ) to get the largest first and onwards.

I did the same thing in java using Collections. It worked perfectly fine there but now I'm unable to achieve this in Koltin I'm getting an ERROR.SAMPLE IMAGE

Consider I've a class Foo()

 private var allHistoryList: ArrayList<ArrayList<Foo>> =   arrayListOf()


     /**
                 * Sorting array of array list to get Biggest to smallest array List based of size
                 */

      Collections.sort(allHistoryList, object: Comparator<ArrayList>{
            override fun compare(var a1, var a2) :Int {
                return a2.size() - a1.size()
            }
                    
        }
 

 Collections.sort(allHistoryList, object: Comparator<ArrayList>{
                    override fun compare(var a1 : ArrayList<*>, var a2 :ArrayList<*>) :Int {
                        return a2.size() - a1.size()
                    }
    
                }
    
                )
                //end of sorting

                 /**
                 * Sorting array of array list to get Biggest to smallest array List based of size
                 */
    
 Collections.sort(allHistoryList, new Comparator<ArrayList>() {
                    public int compare(ArrayList a1, ArrayList a2) {
                        return a2.size() - a1.size(); // working fine in Java.
                    }
                });//end of sorting
like image 398
Atif AbbAsi Avatar asked Oct 24 '25 10:10

Atif AbbAsi


2 Answers

In Kotlin, it's just one line:

allHistoryList.sortByDescending { list -> list.size }

The method sortByDescending mutates the original list sorting it descending using the size of the list as selector to make the comparison between elements.

like image 51
Giorgio Antonioli Avatar answered Oct 27 '25 00:10

Giorgio Antonioli


import java.util.*

fun main(args: Array<String>) {

    val list = ArrayList<CustomObject>()
    list.add(CustomObject("Z"))
    list.add(CustomObject("A"))
    list.add(CustomObject("B"))
    list.add(CustomObject("X"))
    list.add(CustomObject("Aa"))

    var sortedList = list.sortedWith(compareBy({ it.customProperty }))

    for (obj in sortedList) {
        println(obj.customProperty)
    }
}
like image 29
aneez ayyappan Avatar answered Oct 26 '25 23:10

aneez ayyappan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!