一次创建多个对象的Groovy rific方法?

一次创建多个对象的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),

这可能是一个无关紧要的问题,但我对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))
显然,我缩短了名字

我只是想知道是否有更好的方法来重做这个。还是这样


我知道有一个基于映射的构造函数,但我认为这更为详细。

如果有一个按正确顺序接受所有参数的构造函数,则可以在列表上使用扩展运算符,或者可以间接使用映射构造函数:

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
}