在科特林考虑
data class classA (
field1
field2
....
classBlst:List<classB>
)
data class classB (
field3
field4
...
dateField:String
)
问题是循环遍历List,在classBlst中找到最大的dateField并返回该项目的相应field3。dateField是一个字符串,可能包含空值和错误日期,因此请尝试..catch。
我可以建立一个包含所有最大日期的列表,然后对该列表进行第二次迭代以查找最大日期。我可以使用迭代器来做到这一点,但正在寻找实现该功能的任何lambda功能方式。抱歉,所有这些。
答案 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 }