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