【问题标题】:Fill list from java iterator从java迭代器填充列表
【发布时间】:2018-04-17 19:16:51
【问题描述】:
我想用来自java.util.Iterator 的对象填充列表。 groovy 源文件中有一个简单的类 java 代码。
def itr = reader.read()
List<FooRecord> ret = new ArrayList<FooRecord>()
while (itr.hasNext()) {
FooRecord rs = itr.next()
ret.add(rs)
}
有没有更规范的方法来执行从Iterator 复制到列表?
【问题讨论】:
标签:
groovy
collections
iterator
【解决方案1】:
您可以在迭代器上运行 for-each:
itr.each{ret << it}
【解决方案2】:
你想过用 for() 代替 while 吗?在 while 之前实例化你的类怎么样?像这样?
def itr = reader.read()
List<FooRecord> ret = new ArrayList<FooRecord>()
FooRecord rs = new FooRecord();
while (itr.hasNext()) {
rs = itr.next()
ret.add(rs)
}
【解决方案3】:
def ret = []
ret.addAll(reader.read())
感谢 JB 尼泽特
【解决方案4】:
def s = '12345'
def List<String> f=s.iterator().collect{it}
【解决方案5】:
或者只是在 groovy 中使用 as 关键字:
def myList = itr as List
因此下面的代码:
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}"
打印出来:
java.util.ArrayList$Itr
true
list2: [1, 2, 3]
list2 class: ArrayList$Itr1_groovyProxy