[英]How can I generate a list in a functional style in kotlin?
我正在研究一个 function ,它将收到一个预订列表,每个预订都包含一个 unix 时间戳。
我正在使用 function 作为浏览器,其中每个页面都包含一个 recyclerview,所以我想为当天和最后一次预订当天之间的所有天创建一个天列表。
每一天都有它的一天和一个预订列表,也可以是空的。
我想以功能样式创建日期列表,我真的不知道如何,但我很确定 kotlin 有一些不错的功能隐藏在某个地方供我执行。
先感谢您。 :)
这是我的 function 的样子,以及我在其中使用的模型。
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
}
假设您希望看到针对您的问题的更实用的解决方案,您需要创建一个序列,其中包含一天的步骤,直到结束日期。 之后,每一天都映射到相应的 Day object 并过滤预订列表。
请注意,我在 Java 和 Kotlin - LocalDate
class 中使用了更现代(也是首选)的日期处理方式。 我已经包含了一个 function 来将毫秒转换为 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()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.