All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sfm.poi.impl.SheetSpliterator Maven / Gradle / Ivy

package org.sfm.poi.impl;


import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.sfm.map.MappingContext;

import java.util.Spliterator;
import java.util.function.Consumer;

public class SheetSpliterator implements Spliterator {

    private final StaticSheetMapper mapper;
    private final Sheet sheet;
    private final MappingContext mappingContext;

    private int rowNum;

    public SheetSpliterator(StaticSheetMapper mapper, int startRow, Sheet sheet, MappingContext mappingContext) {
        this.mapper = mapper;
        this.rowNum = startRow;
        this.sheet = sheet;
        this.mappingContext = mappingContext;
    }

    @Override
    public void forEachRemaining(Consumer action) {
        Sheet lSheet = this.sheet;
        StaticSheetMapper lMapper = this.mapper;
        MappingContext lMappingContext = this.mappingContext;
        for(int i = rowNum; i <= lSheet.getLastRowNum(); i++) {
            action.accept(lMapper.map(lSheet.getRow(i), lMappingContext));
        }
    }

    @Override
    public boolean tryAdvance(Consumer action) {
        Sheet lSheet = this.sheet;
        if (rowNum <= lSheet.getLastRowNum()) {
            action.accept(mapper.map(lSheet.getRow(rowNum), mappingContext));
            rowNum++;
            return true;
        }
        return false;
    }

    @Override
    public Spliterator trySplit() {
        return null;
    }

    @Override
    public long estimateSize() {
        return sheet.getLastRowNum();
    }

    @Override
    public int characteristics() {
        return Spliterator.ORDERED | Spliterator.NONNULL;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy