0

コレクションを文字列配列に使用してもうまくいかない理由について質問があります。

これは正常に動作しています

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)
    ..
    ...
4

1 に答える 1

1

配列に収集することはできません。コレクションのみです

あなたは試すことができます

def queues = value.collect { it[ 1 ] } as String[]
于 2013-11-28T13:35:23.360 に答える