我必须从列表中对数据进行排序,但是我不知道如何。 我有一些代码:
mailClient.messages(unreadMessages)
.flatMap(_.files)
.filter(filename => {
filename._1.contains("test") && filename._1.endsWith("csv")
})
.toList
.sortWith((f, f1) => getFileDate(f._1).compareTo(getFileDate(f._1)))
这是我的下一个getDate函数:
def getFileDate(filename:String):LocalDate = {
val fileParts = filename.split("_")
val day = Integer.parseInt(fileParts(2))
val month = Integer.parseInt(fileParts(3))
val year = Integer.parseInt(fileParts(4))
new LocalDate(year, month, day)
}
我从文件名(test_03_05_2019.csv)中获取日期,然后尝试按此日期排序并得到此编译错误。
Error:(56, 14) No implicit Ordering defined for java.time.LocalDate.
.sortBy(f => getFileDate(f._1))
Error:(56, 14) not enough arguments for method sortBy: (implicit ord: scala.math.Ordering[java.time.LocalDate])List[(String, String)].
Unspecified value parameter ord.
.sortBy(f => getFileDate(f._1))
Error:(57, 99) type mismatch;
found : Any
required: String
.map { case (filename, csv) => Source.fromString(logger.trace(s"Csv $filename content: {}", csv)) }
我该怎么做?
答案 0 :(得分:2)
您的Ordering
似乎需要一个java.time.LocalDate
-请参阅answer
implicit val localDateOrdering: Ordering[LocalDate] = Ordering.by(_.toEpochDay)
答案 1 :(得分:1)
这应该做到。
.sortWith(getFileDate(_._1) isBefore getFileDate(_._1))