问题描述
我正在尝试在使用 collectFile
之前枚举频道中的文件以重命名它们:
files.flatten().merge(Channel.fromList([1,2,3,4])).collectFile(storeDir: "$SCRATCH/intermediate") {
item -> ["data${item[1]}.csv",item[0].text]
}
但是 latest 文档说通道的 merge
运算符已被弃用,但没有指出应该使用的任何替代方法。我可以用什么代替 merge
?
解决方法
migration notes 表示改用 join operator。如果您的输入是列表,您可以执行以下操作:
def indexedChannel( items ) {
return Channel.from( items.withIndex() ).map { item,idx -> tuple( idx,item ) }
}
ch1 = indexedChannel( [ 15,20,21 ] )
ch2 = indexedChannel( [ 'a','b','c' ] )
ch3 = indexedChannel( [ 1,2,3 ] )
ch1
.join( ch2 )
.join( ch3 )
.view()
结果:
[0,15,a,1]
[1,b,2]
[2,21,c,3]
但是,两个频道的合并/加入就没有必要一一列举了。只需使用 map operator:
def c = 1
Channel
.fromPath( './data/*.txt' )
.map { tuple( it,c++ ) }
.collectFile(storeDir: "$SCRATCH/intermediate") { fn,count ->
["data${count}.csv",fn.text]
}