Open6

Kotlin insensitive sort

ykwsykws

次のようなデータがあります。

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)]
ykwsykws
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)]
ykwsykws
val sorted = files.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, FileType::name).thenBy(FileType::id))

条件を追加したい場合は、この書き方が有効

ykwsykws

sensitive が敏感なのに対して、
insensitive はちょっと無神経

insensitive は Order に対しては機能的な意味として使っているけど、人に対して使うのは相当失礼に当たる様子