一次创建多个对象的Groovy rific方法?
这可能是一个无关紧要的问题,但我对Groovy还比较陌生 假设我有一个简单的POJO:一次创建多个对象的Groovy rific方法?,groovy,Groovy,这可能是一个无关紧要的问题,但我对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),
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))
显然,我缩短了名字
我只是想知道是否有更好的方法来重做这个。还是这样
我知道有一个基于映射的构造函数,但我认为这更为详细。如果有一个按正确顺序接受所有参数的构造函数,则可以在列表上使用扩展运算符,或者可以间接使用映射构造函数:
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
}
如果有按正确顺序接受所有参数的构造函数,则可以在列表上使用spread运算符,或者可以间接使用map构造函数:
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
}