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()) }
3 Réponses :
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.
Utiliser let () code>?
private fun List<Item>.sort() = sortedWith(sortMethod).let {
if (model.preferences.isSortedAscendingly())
it
else
it.reversed()
}
Vous pouvez le faire comme ceci:
list.sortedWith(if (sortAscending) sortMethod else sortMethod.reversed())
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 () code> appels
tolowercase (locale.getdefault ()) code>, donc spécification manuelle de
locale.getdefault () code> ne fait pas aucun sens. Vous devez utiliser
tolowercase () code> 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 b> (pas
locale.getdefault () code>) 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 code> locale code>.
Merci pour ce commentaire. Je l'ai changé à Locale.root. À votre santé.