我的代码中有一条如下所示的语句:
move "\\MyPath\Myfile.csv" "\\MyNewPath\Myfile %DATE%.csv"
有时otherParents.sort { -it.parent.lastUpdateDate.time }.each {
// ...
}
将为null,并导致异常。
如何避免这种情况,我对groovy完全陌生,我尝试了类似
的问号lastUpdateDate
但这也不起作用
答案 0 :(得分:3)
有两种方法可以解决此问题。如果要保留日期为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]]