[JAVA] for문 Stream 변환 예제 - excel 파일 읽기 :: 소림사의 홍반장!
Library Info


Maven
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.0</version>
</dependency>

Gradle
// https://mvnrepository.com/artifact/org.apache.poi/poi
compile group: 'org.apache.poi', name: 'poi', version: '4.1.0'



  1. Apache POI-ooxml (xlsx파일 사용 시 필요)

Maven
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.0</version>
</dependency>

Gradle
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.0'



As-is

public static Map<String, Set<String>> load(String path) {

    if (StringUtils.isEmpty(path)) {
        throw new IllegalArgumentException("학교 목록 파일 경로가 지정되지 않았습니다.");
    }

    Map<String, Set<String>> map = null;
    Set<String> set = null;

    try {
        Workbook workbook = WorkbookFactory.create(new FileInputStream(path));

        int rowindex = 0;
        int columnindex = 0;
        int sheetSize = workbook.getNumberOfSheets();

        map = new HashMap<>();

        Sheet sheet = null;
        Row row = null;
        Cell cell = null;

        for (int i = 0; i < sheetSize; i++) {

            set = new HashSet<>();
            sheet = workbook.getSheetAt(i);
            int rows = sheet.getPhysicalNumberOfRows();

            for (rowindex = 0; rowindex < rows; rowindex++) {
                row = sheet.getRow(rowindex);

                if (row != null) {
                    int cells = row.getPhysicalNumberOfCells();

                    for (columnindex = 0; columnindex <= cells; columnindex++) {
                        cell = row.getCell(columnindex);

                        if (cell == null) {
                            continue;
                        }
                        set.add(Optional.ofNullable(cell.getStringCellValue()).orElse(""));
                    }
                }
            }

            map.put(sheet.getSheetName(), set);
        }
    }catch(Exception e) {
        e.printStackTrace();
    }

    return map;
}





To-be
public static Map<String, Set<String>> load(String path) {


    if (StringUtils.isEmpty(path)) {
        throw new IllegalArgumentException("학교 목록 파일 경로가 지정되지 않았습니다.");
    }


    try {
        Workbook workbook = WorkbookFactory.create(new FileInputStream(path));


        return IntStream.range(0, workbook.getNumberOfSheets())
                .mapToObj(workbook::getSheetAt)
                .collect(
                        Collectors.toMap(
                                Sheet::getSheetName,
                                sheet -> IntStream.range(0, sheet.getPhysicalNumberOfRows())
                                        .mapToObj(sheet::getRow)
                                        .filter(Objects::nonNull)
                                        .map(r -> r.getCell(0))
                                        .filter(Objects::nonNull)
                                        .map(c -> Optional.ofNullable(c.getStringCellValue()).orElse(""))
                                        .collect(Collectors.toSet())
                        )
                );


    }catch(FileNotFoundException fnfe) {
        throw new IllegalArgumentException("학교 목록 파일을 찾을 수 없습니다.");
    } catch (IOException ie) {
        ie.printStackTrace();
        throw new IllegalArgumentException("파일을 읽는 중 오류가 발생하였습니다.");
    }
}


다른 카테고리의 글 목록

Dev. 참고자료 카테고리의 포스트를 톺아봅니다