0
votes

Comment inverser conditionnellement une liste avec un comparé à Kotlin

J'ai le code suivant

    val sortMethod = compareBy<Item> {
        when (model.preferences.getSortMethod()) {
            TITLE -> it.getTitle().toLowerCase(Locale.getDefault())
            DATE -> it.getSortableDateString()
            AUTHOR -> it.getAuthor().toLowerCase(Locale.getDefault())
            DATE_ADDED -> it.getSortableDateAddedString()
        }
    }.thenBy { it.getTitle().toLowerCase(Locale.getDefault()) }


0 commentaires

3 Réponses :


0
votes
private fun List<Item>.sort() : List<Item>{
    if (model.preferences.isSortedAscendingly()){
        return this.sortedWith(sortMethod)
    }
    return this.sortedWith(sortMethod).reversed()
}
Decided my solution will be using the above extension function, but if anyone has a better way i would love to hear.

0 commentaires

0
votes

Utiliser let () code>?

private fun List<Item>.sort() = sortedWith(sortMethod).let {
    if (model.preferences.isSortedAscendingly())
        it
    else
        it.reversed()
}


0 commentaires

1
votes

Vous pouvez le faire comme ceci:

list.sortedWith(if (sortAscending) sortMethod else sortMethod.reversed())


3 commentaires

Merci, c'est ce que je voulais. Linter d'Android Studio me donne un avertissement et suggère que j'ajouterai Locale.getdefault () à mon tolowercase?


@MickStar appelant tolowercase () appels tolowercase (locale.getdefault ()) , donc spécification manuelle de locale.getdefault () ne fait pas aucun sens. Vous devez utiliser tolowercase () sans argument pour créer un résultat qui sera affiché. Mais si vous utilisez un résultat en interne, par exemple, pour trier les entrées de base de données, vous devez spécifier une section locale constante (pas locale.getdefault () ) ou votre programme peut casser après la modification des paramètres régionaux par défaut. Si vous ne savez pas où un résultat sera utilisé, vous devez extraire le paramètre locale .


Merci pour ce commentaire. Je l'ai changé à Locale.root. À votre santé.