Open6
Kotlin insensitive sort
次のようなデータがあります。
data class FileType(val name: String, val id: Int)
val files = listOf(FileType("plist", 1), FileType("SPF", 2), FileType("BLOB", 4))
これをソートすると、
val sorted = files.sortedBy { it.name }
println(sorted)
大文字、小文字のアルファベット順になってしまいます。
[FileType(name=BLOB, id=4), FileType(name=SPF, id=2), FileType(name=plist, id=1)]
val sorted = files.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name })
println(sorted)
こうすると大文字と小文字を区別せずにアルファベット順にソートできます。
[FileType(name=BLOB, id=4), FileType(name=plist, id=1), FileType(name=SPF, id=2)]
参考にした stack overflow
val sorted = files.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, FileType::name).thenBy(FileType::id))
条件を追加したい場合は、この書き方が有効
A Comparator that orders strings ignoring character case.
大文字小文字を無視するよ
sensitive が敏感なのに対して、
insensitive はちょっと無神経
insensitive は Order に対しては機能的な意味として使っているけど、人に対して使うのは相当失礼に当たる様子