Using condition to select the sorting property in Kotlin -
i using sortedby()
perform sorting on collection of objects.
since order may change depending on user choice, i've ended following code
val sortedlist = if (sortingorder == wordsortingorder.by_alpha) { list.sortedby { it.word.value } } else { list.sortedby { it.createdat } }
then perform further actions on sorted collection. realize sortedby()
method expects property returned. wonder if there way embed sorting condition in 1 chain of collection methods.
if properties of different types won't able select 1 of them based on condition result sortedby
, common supertype inferred any
, not subtype of comparable<r>
sortedby
expects.
instead can utilize sortedwith
method, takes comparator
, , provide comparator depending on condition:
list.sortedwith( if (sortingorder == wordsortingorder.by_alpha) compareby { it.word.value } else compareby { it.createdat } )
comparators different properties created here kotlin.comparisons.compareby
function.
you can extract logic selects comparator based on sorting order function:
list.sortedwith(comparatorfor(sortingorder)) fun comparatorfor(sortingorder: wordsortingorder): comparator<mytype> = ...
Comments
Post a Comment