groovy – 为什么空集合上的每个闭包至少运行一次?
发布时间:2020-12-14 16:32:39 所属栏目:大数据 来源:网络整理
导读:我有一个从Web服务器下载文件的功能,有时会提供空集合.在函数中,我在该集合上调用每个函数,我期望发生的是函数只是退出,每个闭包都没有运行.问题是,它确实运行了一个空的文件名参数,并且FileOutputStream的创建在它被提供目录而不是文件时变得繁荣. def get(
我有一个从Web服务器下载文件的功能,有时会提供空集合.在函数中,我在该集合上调用每个函数,我期望发生的是函数只是退出,每个闭包都没有运行.问题是,它确实运行了一个空的文件名参数,并且FileOutputStream的创建在它被提供目录而不是文件时变得繁荣.
def get(String baseUrl,List files,String targetDir) { files.each { filename -> // Goes BOOM on next line def fos = new FileOutputStream(targetDir + File.separator + filename) ... } 为什么Groovy表现得像这样,我应该怎么做呢? 解决方法
它没有,所以我假设文件包含一些东西(比如null?)
[].each { println "boom" // This doesn't appear } [null].each { println "pow!" // this does } 假设它在你的文件列表中是空的,导致问题,你可以通过以下方式摆脱它们: files.findAll().each { filename -> def fos = new FileOutputStream( new File( targetDir,filename ) ) ... 或者当然,首先使生成List的东西不添加空值 编辑 实际上,听起来你有一个带有空字符串的List …… findAll修复程序应该仍然有效,因为在Groovy Truth下空字符串的计算结果为false 编辑2 作为快速说明,您可以更改: def fos = new FileOutputStream( new File( targetDir,filename ) ) ... 至: new File( targetDir,filename ).withOutputStream { fos -> ... 它会为你ensure the stream is closed (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |