Ich möchte die Liste mit Objekten aus java.util.Iterator füllen. Es gibt einen einfachen Java-ähnlichen Code in einer groovigen Quelldatei.

def itr = reader.read()  
List<FooRecord> ret = new ArrayList<FooRecord>()
while (itr.hasNext()) {
    FooRecord rs = itr.next()
    ret.add(rs)
}

Gibt es eine bessere Möglichkeit, eine Kopie von Iterator in die Liste durchzuführen?

1
Loom 17 Apr. 2018 im 22:16

5 Antworten

Beste Antwort
def ret = []
ret.addAll(reader.read())

Vielen Dank an JB Nizet

0
Loom 18 Apr. 2018 im 07:39

Sie können ein for-each auf dem Iterator ausführen:

itr.each{ret << it}
2
ernest_k 18 Apr. 2018 im 15:20

Haben Sie darüber nachgedacht, ein for () anstelle einer Weile zu verwenden? Wie wäre es, Ihre Klasse vor der Weile zu instanziieren? so was?

def itr = reader.read()  
List<FooRecord> ret = new ArrayList<FooRecord>()
FooRecord rs = new FooRecord();
while (itr.hasNext()) {
 rs = itr.next()
 ret.add(rs)
}
0
Cesar Kemper 17 Apr. 2018 im 19:26
def s = '12345'
def List<String> f=s.iterator().collect{it}
0
daggett 18 Apr. 2018 im 07:41

Oder verwenden Sie einfach das Schlüsselwort as in groovy:

def myList = itr as List

Also der folgende Code:

def list1 = [1, 2, 3]
def itr   = list1.iterator()

println  itr.class.name
println  itr instanceof Iterator

def list2 = itr as List

println "list2:       $list2"
println "list2 class: ${list2.class.name}"

Druckt aus:

java.util.ArrayList$Itr
true
list2:       [1, 2, 3]
list2 class: ArrayList$Itr1_groovyProxy
0
Matias Bjarland 18 Apr. 2018 im 08:52