【问题标题】: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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-08-24
            • 1970-01-01
            • 1970-01-01
            • 2021-01-04
            • 1970-01-01
            • 2016-07-19
            • 1970-01-01
            相关资源
            最近更新 更多