Skipping the First Iteration in Java

겔로그·2023년 10월 9일
0
post-thumbnail

Iterating은 자료 구조를 쉽게 조작/순회할 수 있는 프로그래밍의 기초입니다.
오늘은 Collections에서 첫번째 인자를 건너뛰어야 하는 상황이 발생할 경우 사용할 수 있는 여러 기법들을 공유하고자 합니다.

첫 번째 요소를 건너뛰는 다양한 기법

Collection에서 첫 번째 요소를 건너뛰는 다양한 기법들을 배우는 이유는 일부 알고리즘에서 첫번째 요소를 건너뛰어야만 하는 상황이 발생하기 때문입니다. 대표적으로는 CSV 파일을 읽을 때가 있습니다.

CSV 파일에서 첫번째 인자는 헤더 부분을 의미합니다. 헤더를 제외한 실제 데이터만으로 비즈니스 로직을 구현하고 싶을 경우 첫번째 요소를 건너뛰는 기능을 구현해야 합니다.

아래는 첫번째 요소를 건너뛸 수 있는 다양한 방법들입니다.

1. for-loop

가장 단순한 방법으로는 for-loop가 존재합니다. index 값을 1로 시작해 첫번째 인자를 무시하고 순차적으로 접근할 수 있습니다.

void skippingFirstElementInListWithForLoop(List<String> stringList) {
    for (int i = 1; i < stringList.size(); i++) {
        process(stringList.get(i));
    }
} 

단순하게 구현할 수 있으며, 인덱스를 이용한 접근 방식입니다.

2. while loop

인덱스로 참조가 불가능한 Iterable Collection에서는 1번 for-loop 기법을 사용할 수 없습니다.

이를 대체하여 while loop를 사용하는 방식입니다. 첫 번째 요소를 건너뛰도록 while문에 들어가기 이전에 iterator를 한 번 사용해 건너뛰는 방식입니다.

void skippingFirstElementInListWithWhileLoop(List<String> stringList) {
    Iterator<String> iterator = stringList.iterator();
    if (iterator.hasNext()) {
        iterator.next();
    }
    while (iterator.hasNext()) {
        process(iterator.next());
    }
}

추가적인 이점으로는 컬렉션을 가장 일반적인 클래스로 추상화할 수 있습니다. Iterable Collection에서는 Iterator이라는 인터페이스를 활용하여 재사용성을 극대화합니다.

3. Stream API

Java 8에서는 Collection을 선언적으로 조작할 수 있는 Stream API가 도입되었습니다.

다양한 Stream API 중 첫 번째 요소를 건너뛰기 위해서 skip() 메소드를 활용할 수 있습니다.

void skippingFirstElementInListWithStreamSkip(List<String> stringList) {
    stringList.stream().skip(1).forEach(this::process);
}

4. subList() 활용

subList 메소드를 활용해 List의 첫번째 인자를 뺀 나머지 리스트를 분리하여 첫번째 인자를 쉽게 건너뛸 수 있습니다.

void skippingFirstElementInListWithSubList(List<String> stringList) {
    for (final String element : stringList.subList(1, stringList.size())) {
        process(element);
    }
}

주의사항으로는 빈 리스트에서 에러가 발생할 수 있어 에러에 대한 핸들링이 필요합니다.

결론

Java에서 첫 번째 요소를 건너뛰기 위해서 구현할 수 있는 방법은 다양합니다. 하지만 가능하다면 가장 간단한 for-loop 혹은 stream API를 활용하는 것이 좋습니다.

다른 방법들은 좀 더 복잡하거나 예외 처리를 해야되기 때문에 최대한 피하는 것이 좋습니다.

감사합니다.

Reference

https://www.baeldung.com/java-skip-first-iteration

profile
Gelog 나쁜 것만 드려요~

0개의 댓글