kotlin - Kotlin:查找列表的最大日期列表
问题描述
在 kotlin 中考虑:
data class classA (
field1
field2
....
classBlst:List<classB>
)
data class classB (
field3
field4
...
dateField:String
)
问题是通过 List 循环,在 classBlst 中找到最大的 dateField,并返回该项目的相应 field3。dateField 是一个字符串,可能包含空值和错误日期,因此需要尝试..catch。
我可以建立一个包含所有最大日期的列表,然后在该列表上进行第二次迭代以找到最大值。我可以使用迭代器来做到这一点,但要寻找任何 lambda 函数式的方法来做同样的事情。对不起,这一切都是新手。
解决方案
鉴于:
data class ClassA(val list: List<ClassB>)
data class ClassB(val field3: Int, val dateField: String? = null)
您可以使用 mapNotNull 获取最新日期,您将在其中格式化日期并在遇到异常时返回 null。
然后在包含格式化日期的字段上使用 maxBy 在您在上一个 mapNotNull 中创建的新对象中
我选择使用 Pair 因为看起来您只需要一个过滤器并且不想保留新创建的对象。但如果不是这种情况,请考虑创建一个包含所有所需信息的新类。
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 }
推荐阅读
- github - 使用github忽略codeigniter的config文件夹下的文件不起作用
- java - 我用jsp带表,但是点next的时候,其他数据没有到表
- pagination - 我是烧瓶mysql的新手。我在为列表视图制作分页 API 时遇到了麻烦。请看一下
- c# - 已存在具有相同键的条目 - DNN
- error-handling - 如何更改标签签名?
- c++ - 未定义符号:在 VS 2017 中链接静态库时的 std::string
- javascript - 如何搜索文本并忽略文本中的空格?
- excel - 复制公式直到空白单元格
- java - Antlr4 中的显式数据类型
- powerbi - Power 查询中基于过去 3 个月的计算列