代码之家  ›  专栏  ›  技术社区  ›  Azim

为什么java.util.Iterator不在嵌套循环中重置?

  •  0
  • Azim  · 技术社区  · 5 年前

    当我运行这段代码时,迭代器 iter iter 每次都在外循环,但都没用!也就是说,在第一次迭代之后,iterable的长度为零!

    String path = "somefile.csv";
    try {
            Reader in = new FileReader(path);
            Iterable<CSVRecord> records = CSVFormat.RFC4180.withHeader(MetadataExtractorForTables.HeaderType.class)
                    .withDelimiter('\t').parse(in);
    
            // A stupid loop
            for(int i = 0; i < 3; i++) {                
                Iterator<CSVRecord> iter = records.iterator();
                System.out.println("---> " + Iterators.size(iter));
                System.out.println("--> " + StreamSupport.stream(records.spliterator(), false).count());
    
                /* ----------------------------------------
                 * here I would like to use the iterator
                 * in a (nested) loop
                 * ---------------------------------------- */
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    

    输出如下:

    ---> 191
    --> 0
    ---> 0
    --> 0
    ---> 0
    --> 0
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Louis Wasserman    5 年前

    因为这是一个邪恶的,违反合同的东西。

    docs

    从输入流中解析记录后,无法返回。

    您必须显式地将其复制到列表中或类似的内容中。