Kotlin:查找最大日期列表列表

时间:2019-09-26 23:32:25

标签: kotlin

在科特林考虑

     data class classA (
      field1
      field2
      ....
       classBlst:List<classB>
      )

      data class classB (
       field3
       field4
       ...
      dateField:String
      )

问题是循环遍历List,在classBlst中找到最大的dateField并返回该项目的相应field3。dateField是一个字符串,可能包含空值和错误日期,因此请尝试..catch。

我可以建立一个包含所有最大日期的列表,然后对该列表进行第二次迭代以查找最大日期。我可以使用迭代器来做到这一点,但正在寻找实现该功能的任何lambda功能方式。抱歉,所有这些。

1 个答案:

答案 0 :(得分:0)

给出:

data class ClassA(val list: List<ClassB>)
data class ClassB(val field3: Int, val dateField: String? = null)

您可以使用mapNotNull获取最新日期,该日期将设置日期格式,如果出现异常,则返回null。

然后在上一个mapNotNull中创建的新对象中,在包含格式化日期的字段上使用maxBy

我选择使用“对”,因为它看起来像只希望使用过滤器,而又不想保留新创建的对象。但是,如果不是这种情况,请考虑创建一个包含所有所需信息的新类。

val a = ClassA(
    listOf(
        ClassB(0, "24"),
        ClassB(1, "24/03/1987"),
        ClassB(2),
        ClassB(3, "24/03/2024")
    )
)

val res = a.list
    .mapNotNull {
        val dateFormater = DateTimeFormatter.ofPattern("dd/MM/yyyy")
        try {
            Pair(it.field3, LocalDate.parse(it.dateField, dateFormater))
        } catch (e: Exception) {
            null
        }
    }
    .maxBy { it.second }