Sorting ArrayList in Koltin based on size

2020-03-30 arrays sorting kotlin collections

I've have a ArrayList of ArrayList what I want to achive is , to sort them in decending order (based on Highest to lowest List size ) to get largest first and onwards.

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

Consider I've have 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

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.

Related