mam*_*ama 0 functional-programming list kotlin
我正在开发一个函数,该函数将接收预订列表,并且每个预订都包含一个 unix 时间戳。
我正在使用 viewpager 的功能,其中每个页面都包含一个 recyclerview,因此我想创建一个天数列表,包含当前日期和上次预订日期之间的所有日期。
每天都有自己的日期和预订列表,该列表也可以为空。
我想以函数式风格创建日期列表,我真的不知道如何做,但我很确定 kotlin 有一些不错的功能隐藏在某处供我执行。
先感谢您。:)
这是我的函数的样子,以及我在其中使用的模型。
data class Day(val date:Date, val bookings: List<Bookink>)
data class Booking(val id:String, val time:Long, val user:User)
fun dates(bookings: List<Booking>): List<Day> {
val lastDate = Date(bookings.last().time)
val days = ArrayList<Day>()
val cal = GregorianCalendar()
cal.time = Date()
while (cal.time.before(lastDate)) {
days.add(Day(cal.time, bookings.filter { (Date(it.time) == cal.time) }))
cal.add(Calendar.DATE, 1)
}
return days
}
Run Code Online (Sandbox Code Playgroud)
小智 5
假设您希望看到针对您的问题的更实用的解决方案,您需要创建一个在结束日期之前包含一天步骤的序列。之后,每一天都会映射到相应的 Day 对象以及经过过滤的预订列表。
请注意,我在 Java 和 Kotlin 类中使用了更现代(也是首选)的日期处理方式LocalDate。我已经包含了一个将毫秒转换为 LocalDate 的函数 -Long.toLocalDate
fun dates(bookings: List<Booking>): List<Day> {
val startDate = LocalDate.now()
val endDate = bookings.last().time.toLocalDate()
return generateSequence(startDate) { it.plusDays(1) }
.takeWhile { it.isBefore(endDate) }
.map { day -> Day(day, bookings.filter { it.time.toLocalDate() == day }) }.toList()
}
private fun Long.toLocalDate(): LocalDate {
return Instant.ofEpochMilli(this)
.atZone(ZoneId.systemDefault())
.toLocalDate()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |