Iva*_*ers 7 sorting date kotlin
我正在尝试创建一个Kotlin REST API,它从PostgreSQL数据库中检索值.现在这些结果中的值是fe "14-10-2016 | 15:48","01-08-2015 | 09:29"所以语法基本上是dd-MM-yyyy | hh:mm
现在我要做的是创建一个函数,按日期排序.(假设这些字符串在一个数组中)
var list = listOf("14-10-2016 | 15:48",
"01-08-2015 | 09:29",
"15-11-2016 | 19:43")
Run Code Online (Sandbox Code Playgroud)
排序这些最干净(最实用)的方法是什么?(所以fe有一种方法,我不必采取当天,月等的子串,将它们转换为a Int,在嵌套循环中比较它们并将结果写入不同的数组?(这是我唯一的方法可以想到).
可以使用多种方法.这取决于您获得排序结果后的处理方式.
注意事项:
java.time.LocalDateTime已经实现了
java.lang.Comparable<T>Interface.我们可以使用kotlin stdlib 直接List.sortBy排序List<LocalDateTime>.参考:
// https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted-by.html
fun <T, R : Comparable<R>> Iterable<T>.sortedBy(
selector: (T) -> R?
): List<T>
Run Code Online (Sandbox Code Playgroud)
最简单的方法是直接转换String -> java.time.LocalDateTime和使用List.sortBy.
整个实现可能是这样的:
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
...
// Create a convert function, String -> LocalDateTime
val dateTimeStrToLocalDateTime: (String) -> LocalDateTime = {
LocalDateTime.parse(it, DateTimeFormatter.ofPattern("dd-MM-yyyy | HH:mm"))
}
val list = listOf("14-10-2016 | 15:48",
"01-08-2015 | 09:29",
"15-11-2016 | 19:43")
// You will get List<LocalDateTime> sorted in ascending order
list.map(dateTimeStrToLocalDateTime).sorted()
// You will get List<LocalDateTime> sorted in descending order
list.map(dateTimeStrToLocalDateTime).sortedDescending()
// You will get List<String> which is sorted in ascending order
list.sortedBy(dateTimeStrToLocalDateTime)
// You will get List<String> which is sorted in descending order
list.sortedByDescending(dateTimeStrToLocalDateTime)
Run Code Online (Sandbox Code Playgroud)
如果你想使用org.joda.time.DateTime,你只需对转换功能进行微小的改动.
一个友好的提醒,总是val选择在Kotlin :)的第一选择.
| 归档时间: |
|
| 查看次数: |
9608 次 |
| 最近记录: |