gpt4 book ai didi

使用闭包和 null 安全检查进行 Groovy 集合排序会导致异常

转载 作者:行者123 更新时间:2023-12-03 08:58:34 25 4
gpt4 key购买 nike

我的代码中有如下语句:

otherParents.sort { -it.parent.lastUpdateDate.time }.each {
// ...
}

有时lastUpdateDate将为空,并导致异常。

我怎样才能避免它,我对groovy完全陌生,我尝试过问号之类的东西

otherParents.sort { -it.parent?.lastUpdateDate?.time }.each {
// ...
}

但这也不起作用

最佳答案

有两种方法可以解决这个问题。如果您想保留带有 null 日期的条目,那么您必须传递一个代表比较器的闭包,如下所示:

otherParents.sort { a,b -> b.parent.lastUpdatedDate?.time <=> a.parent.lastUpdatedDate?.time }.each {
println it
}

它将按降序对条目进行排序,最后更新日期为 null 的条目将存储在列表末尾。

或者,如果您想删除上次更新日期为 null 的条目,则可以过滤输入列表并使用之前使用的相同排序操作:

otherParents.findAll { it.parent.lastUpdatedDate != null }.sort { -it.parent.lastUpdatedDate.time }.each {
println it
}

唯一的区别是第二个示例将仅对上次更新日期非空的条目列表进行排序。

下面您可以找到一个示例及其生成的输出:

import java.text.SimpleDateFormat

def date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")

def otherParents = [
[parent: [lastUpdatedDate: date.parse("2018-10-26T10:00:00")]],
[parent: [lastUpdatedDate: date.parse("2018-10-26T10:00:01")]],
[parent: [lastUpdatedDate: null]],
[parent: [lastUpdatedDate: date.parse("2018-10-26T10:00:02")]],
[parent: [lastUpdatedDate: date.parse("2018-10-26T10:00:03")]],
[parent: [lastUpdatedDate: null]],
[parent: [lastUpdatedDate: null]]
]

otherParents.sort { a,b -> b.parent.lastUpdatedDate?.time <=> a.parent.lastUpdatedDate?.time }.each {
println it
}

println "----"

otherParents.findAll { it.parent.lastUpdatedDate != null }.sort { -it.parent.lastUpdatedDate.time }.each {
println it
}

输出:

[parent:[lastUpdatedDate:Fri Oct 26 10:00:03 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:02 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:01 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:00 CEST 2018]]
[parent:[lastUpdatedDate:null]]
[parent:[lastUpdatedDate:null]]
[parent:[lastUpdatedDate:null]]
----
[parent:[lastUpdatedDate:Fri Oct 26 10:00:03 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:02 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:01 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:00 CEST 2018]]

关于使用闭包和 null 安全检查进行 Groovy 集合排序会导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53005696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com