这可能是一个微不足道的问题,但我对Groovy来说相对较新。
说我有一个简单的POJO:
class Ident {
String a,
String b,
String c
}
接下来,我在另一个类上有这样的函数:
void select(Ident ... idents) {
// do something for each ident
}
现在,我只是用Java方式做这件事:
blah.select(new Ident(a1, b1, c1),
new Ident(a2, b2, c2),
...
new Ident(aN, bN, cN))
显然,我缩短了名字。
我只是想知道是否有Groovy-ier方式重做这个。或者是这样吗?
我知道那里有一个基于地图的构造函数,但我认为这更加冗长。
答案 0 :(得分:1)
如果您有一个以正确顺序获取所有args的构造函数,或者您可以间接使用map构造函数,则可以在列表中使用spread运算符:
import groovy.transform.TupleConstructor
@TupleConstructor // add constructor Ident(a,b,c)
class Ident {
String a
String b
String c
}
def argLists = [['a1', 'b1', 'c1'], ['a2', 'b2', 'c2']]
argLists.collect { new Ident(*it) } //spread
argLists.collect { it as Ident } // list coercion
argLists.collect {
def map = [['a', 'b', 'c'], it].transpose().collectEntries()
new Ident(map) // map constructor
}
argLists.collect {
[['a', 'b', 'c'], it].transpose().collectEntries() as Ident // map coercion
}