使用Iterator遍历Sheet(POI)验证及解释结果有序性

 

test.xlsx:

 

Code:

package poi;

import static org.junit.Assert.*;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(value=Parameterized.class)
public class TestIterator {
    public TestIterator(Integer times) {
    }

    @Parameters
    public static Collection<Integer[]> init(){
        int times=200;
        Integer[][] parameters=new Integer[times][1];
        for (int i = 0; i < times; i++) {
            parameters[i][0]=i;
        }
        return Arrays.asList(parameters);
    }

    @Test
    public void  testItertor() throws IOException{
        List<Integer> expected=new ArrayList<Integer>();//rowNums.need to change according to demand
        for (int i = 0; i <=1 ; i++) {
            expected.add(i);
        }
        expected.add(3);
        expected.add(4);
        expected.add(6);

        List<Integer> actual=new ArrayList<Integer>();

        String filePath="/poi/test.xlsx";
        InputStream is=this.getClass().getResourceAsStream(filePath);
        Workbook wb=new XSSFWorkbook(is);
        Sheet sheet=wb.getSheetAt(0);
        for (Row row : sheet) {
            actual.add(row.getRowNum());
        }

        assertEquals(expected, actual);
    }
}

结果:通过验证。

源码解析:
org.apache.poi.xssf.usermodel.XSSFSheet
XSSFRow的存放数据结构:

 private TreeMap<Integer, XSSFRow> _rows;
    /**
     * @return an iterator of the PHYSICAL rows.  Meaning the 3rd element may not
     * be the third row if say for instance the second row is undefined.
     * Call getRowNum() on each row if you care which one it is.
     */
    @SuppressWarnings("unchecked")
    public Iterator<Row> rowIterator() {
        return (Iterator<Row>)(Iterator<? extends Row>) _rows.values().iterator();
    }

    /**
     * Alias for {@link #rowIterator()} to
     *  allow foreach loops
     */
    public Iterator<Row> iterator() {
        return rowIterator();
    }

 

时间: 2024-10-19 17:07:41

使用Iterator遍历Sheet(POI)验证及解释结果有序性的相关文章

java-TreeSet的Iterator遍历问题

问题描述 TreeSet的Iterator遍历问题 TreeSetset = new TreeSet(); set.add("one1"); set.add("two1"); set.add("three1"); for(Iterator it =set.iterator();it.hasNext();) { String str = it.next(); System.out.println(str); if(str.equals("

java中map为什么不能直接使用iterator遍历?

问题描述 java中map为什么不能直接使用iterator遍历? 求教大神:直接使用map的时候方法中不会显示iterator方法,而是要写Set set = map.keySet();才可以使用iterator方法,为什么map和set同为集合,map就不可以直接使用iterator方法?内部逻辑是什么? 解决方案 只有实现的collection集合才有iterator方法,比如List和se接口:而Map接口不能使用iterator方法,需要现获取set视图,即Set set = map.

使用Enumeration和Iterator遍历集合类详解_java

前言在数据库连接池分析的代码实例中,看到其中使用Enumeration来遍历Vector集合.后来就找了一些资料查看都有哪些方法可以遍历集合类,在网上找到了如下的使用Enumeration和Iterator遍历集合类的实例.不过这个实例中提到了Enumeration比Iterator的效率更高,其实并不是这样子的,该实例是的时间测试太片面了, 因为数据量太少.随着数据两的增加,两者之间的效率越来越接近,而不会出现倍数的比例.而且现在普遍都使用Iterator来遍历集合类,只有特别明确声明必须使用

JSP中c:foreach遍历和s:iterator遍历异同实例分析_JSP编程

本文实例分析了JSP中c:foreach遍历和s:iterator遍历的异同.分享给大家供大家参考.具体如下: ①jstl c:foreach 首先我们来看一个普通的servlet: import com.xy.entity.Board; import com.xy.entity.Topic; import com.xy.entity.User; public class ToMainAction extends HttpServlet { private IBoarderDao boardDa

java使用iterator遍历指定目录示例分享_java

可以遍历指定目录(一个或多个)及其所有子文件,用Iterator实现 复制代码 代码如下: package archiver.util; import java.io.File;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.List; public class FileIterator implements Iterator<File>, Iterabl

c:foreach遍历和s:iterator遍历异同

①jstl c:foreach 首先我们来看一个普通的servlet: import com.xy.entity.Board; import com.xy.entity.Topic; import com.xy.entity.User; public class ToMainAction extends HttpServlet {  private IBoarderDao boardDao = new BoardDaoImpl();  private ITopicDao topicDao = n

Java中LinkedList使用Iterator遍历的问题

问题描述 老师留的作业题,实在是头疼....importjava.util.*;publicclassController{privateLinkedList<Event>eventList=newLinkedList<Event>();publicvoidaddEvent(Eventc){eventList.add(c);}publicvoidrun(){LinkedList<Event>eventListCopy=newLinkedList<Event>

如何在遍历中使用iterator及reverse_iterator删除元素

众所周知,在使用迭代器遍历 STL 容器时,需要特别留意是否在循环中修改了迭代器而导致迭代器失效的情形.下面我来总结一下在对各种容器进行正向和反向遍历过程中删除元素时,正确更新迭代器的用法.本文完整源码:https://code.csdn.net/snippets/173595 首先,要明白使用正向迭代器(iterator)进行反向遍历是错误的用法,要不干嘛要有反向迭代器呢(reverse_iterator).其次,根据容器的特性,遍历删除操作的用法可以分为两组,第一组是 list 和 vect

java数组遍历——iterator和for方法

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayTest {  public static void main(String[] args)  {   List<Integer> lstint = new ArrayList<Integer>();   lstint.add(1);   lstint.add(2);   lstint.add