【问题标题】:collect possible to def queues = [] as String[]?收集可能的 def queues = [] as String[]?
【发布时间】:2013-11-28 13:29:40
【问题描述】:

我有一个问题,为什么对字符串数组使用 collect 不起作用。

一切正常

String[][] serversAndQueues = [["server1","queue"],["server1","queue1"],["server2","queue2"]]

serversAndQueues.groupBy { it[ 0 ] }.each { server, value ->
    def queues = []
    value.collect(queues){
        it[1]
    }
    println "$server => $queues"
}

输出

server1 => [queue, queue1]
server2 => [queue2]

但如果我尝试将队列定义为字符串数组def queues = [] as String[],则会出现异常

String[][] serversAndQueues = [["server1","queue"],["server1","queue1"],["server2","queue2"]]

serversAndQueues.groupBy { it[ 0 ] }.each { server, value ->
    def queues = [] as String[]
    value.collect(queues){
        it[1]
    }
    println "$server => $queues"
}

输出

Exception thrown

    groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.collect() is applicable for argument types: ([Ljava.lang.String;, ConsoleScript40$_run_closure2_closure3) values: [[], ConsoleScript40$_run_closure2_closure3@ff8c2a]
    Possible solutions: collect(), collect(), collect(groovy.lang.Closure), collect(java.util.Collection, groovy.lang.Closure), collect(java.util.Collection, groovy.lang.Closure), collect(groovy.lang.Closure)

        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55)

        at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46)
    ..
    ...

【问题讨论】:

  • 提供的答案有帮助吗?

标签: groovy collect


【解决方案1】:

你不能收集成一个数组,只能收集一个集合

你可以试试

def queues = value.collect { it[ 1 ] } as String[]

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 2014-09-15
    • 2018-07-25
    • 1970-01-01
    • 2010-10-06
    • 2019-08-26
    • 2017-01-28
    相关资源
    最近更新 更多