やりたいこと
REST APIで以下のようなJSONで帰ってくるKotlinのコードがあったとします。
[{"name":"Taro", "age":"28", "createdAt":"2021/02/22 12:01:10"},
{"name":"Hanako", "age":"28", "createdAt":"2021/02/22 15:10:39"},
{"name":"Yoshi", "age":"44", "createdAt":"2021/02/23 00:39:44"}]
ResponseクラスにcreatedAtを含めずにでも、createdAtでソートする方法をメモっておきます。
createdAtを見せずにソート
Response.kt
data class Response(
var name: String,
var age: Int
) {
@JsonIgnore
var createdAt: LocalDateTime? = null
constructor(user: User): this(
name = user.name,
age = user.age
) {
createdAt = user.createdAt
}
}
sort.kt
fun sort(list: List<Response>) : List<Response> {
return list.sortedBy { it.createdAt }
}
[{"name":"Taro", "age":"28"},
{"name":"Hanako", "age":"28"},
{"name":"Yoshi", "age":"44"}]
ソートに限らず、データクラスに対するメタデータ的なものを用いてロジックを組みたいときなど、@JsonIgnore
が結構重宝します。
createdAtが見えてしまう形でソート
Response.kt
data class Response(
var name: String,
var age: Int,
var createdAt: LocalDateTime
) {
constructor(user: User): this(
name = user.name,
age = user.age,
createdAt = user.createdAt
)
}
または以下もダメです。
Response.kt
data class Response(
var name: String,
var age: Int
) {
var createdAt: LocalDateTime? = null
constructor(user: User): this(
name = user.name,
age = user.age
) {
createdAt = user.createdAt
}
}
sort.kt
fun sort(list: List<Response>) : List<Response> {
return list.sortedBy { it.createdAt }
}