如何在Scala中对数据排序?

时间:2019-06-13 09:01:37

标签: scala

我必须从列表中对数据进行排序,但是我不知道如何。 我有一些代码:

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)) }

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您的Ordering似乎需要一个java.time.LocalDate-请参阅answer

implicit val localDateOrdering: Ordering[LocalDate] = Ordering.by(_.toEpochDay)

答案 1 :(得分:1)

这应该做到。

.sortWith(getFileDate(_._1) isBefore getFileDate(_._1))