按月日分组-Kotlin逻辑问题

  • 本文关键字:问题 -Kotlin kotlin
  • 更新时间 :
  • 英文 :


我被逻辑卡住了。所以它在这里,我有一个模型类注意:

data class Note(
val id: Int,
val title: String,
val description: String,
val date: Long = System.currentTimeMillis()
)

我的应用程序List<Note>中有多个笔记的列表。我需要一种方法将该列表转换为地图。其中键为date: Long,值为List<Note>。所以:Map<Long, List<Note>>。我需要在月底之前把这些笔记分组。例如,如果在10月31日创建了多个注释,则应将它们分组在Map中的单个注释列表中。

我真的不确定我该如何做到这一点。这些日期值总是有问题。如果有任何帮助,我将不胜感激

您可以添加一个helper属性来获取LocalDate格式的日期,这样可以很容易地按天排序。如果您经常重复使用它,您可能会考虑将其添加为成员属性,而不是在每次检索时计算(但不是在构造函数中,因为它是从参与equalshashcode的另一个属性计算的(。

val Note.localDate: LocalDate
get() = Instant.ofEpochMilli(date).atZone(ZoneId.systemDefault()).toLocalDate()

然后,您可以使用groupBy创建日期到列表的映射。

val notesByLocalDate = notes.groupBy(Note::localDate) // or { it.localDate }

这将是仅仅因为你可以,并不意味着你应该"。

.groupBy {
val noteCalendar = Calendar.getInstance()
noteCalendar.timeInMillis = it.date
val day = noteCalendar.get(Calendar.DAY_OF_MONTH)
val month = noteCalendar.get(Calendar.MONTH)
val year = noteCalendar.get(Calendar.YEAR)
val dayCalendar = Calendar.getInstance()
dayCalendar.timeInMillis = 0L
dayCalendar.set(Calendar.DAY_OF_MONTH, day)
dayCalendar.set(Calendar.MONTH, month)
dayCalendar.set(Calendar.YEAR, year)
dayCalendar.set(Calendar.HOUR_OF_DAY, 12)
dayCalendar.timeInMillis
}

尝试按创建日期(以毫秒为单位(对某个对象进行分组将不会导致分组,因为没有任何对象是在同一时间创建的*。因此,对它进行分组的唯一方法是将这些事情发生的日期范围转换为一个值。在这种情况下,是当天中午,以避免时区问题。

但我再次建议不要将其按CCD_ 8分组。

最新更新