Iterator에서 Stream로 간 이유

iterator, stream 둘다 반복적인 연산을 줄여주기 위해 만든 구분자이다. 최근에는 iterator보단 stream을 많이 사용한다. 써보면 안다. 코드량도 줄어들고 중간처리를 할 수 있는 연산들이 stream가 더 편하다는 걸.

예시)

List<String> stringList = Arrays.asList("월", "화", "수", "목", "금");

이 stringList 객체에 요일 요소들을 저장해두고 요일을 제거하는 작업을 각자 해보자.


iterator 예시

        Iterator<String> iterator = stringList.iterator();

        while (iterator.hasNext()) {
            System.out.println("iterator.next(): "+iterator.next());

            var day = iterator.next();

            if ("수".equals(day)) {
                iterator.remove();  // NoSuchElementException
            }
            System.out.println("day: "+ day);
        }
        System.out.println("-----------------------");
        iterator = list.iterator();
        while ((iterator.hasNext())) {
            var day = iterator.next();
            System.out.println("day: "+ day);
        }

stream 예시

        Stream<String> stringStream = stringList.stream();

        stringStream.filter(s -> !"수".equals(s))
                .forEach(System.out::println);

코드만 봐도 stream으로 구분자를 두고 한 것이 길지 않고 직관적이다. stream은 중간처리과정도 있어 행여나 iterator에 생기는 elementException도 생기지 않는다고 한다.

이래서 iterator는 잘 안보이고 stream으로 많이 쓰는 것인가 보다. stream 많이 사용하자!

좋은 웹페이지 즐겨찾기