ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Stream map vs Stream foreach vs Collection foreach
    우아한 테크코스/테크코스 2020. 3. 5. 00:07
    반응형

    For Loop문

     수동 로또를 만드는 메서드를 아래와 같이 작성을 했었는데, foreach나 map을 적용해봐도 좋을 것 같다고하여 적용 해보면서 간단하게 정리. 나름 직관적인 코드라고 생각했지만, 아래 방법들이 더 직관적으로 들어온다.

    private static List<Lotto> createManualLottos(List<String> manualLotto, LottoCount count) {
        List<Lotto> lottos = new ArrayList<>();
        int lottoCount = manualLotto.size();
        for (int index = 0; index < lottoCount; index++) {
            lottos.add(LottoFactory.createManual(manualLotto.get(index)));
        }
        return lottos;
    }

    Stream Map 이용

     스트림의 값 자체를 변경

    private static List<Lotto> createManualLottos(List<String> manualLotto, LottoCount count) {
        return manualLotto.stream()
            .map(Lotto::of)
            .collect(Collectors.toList());
    }

    Foreach 이용

     값 자체를 변경하는 것이 아닌, 값을 꺼내서 그 값으로 작업을 하는 것

     Iterable.foreach(Consumer<? super T> action) -> 처리 순서 보장

    /* 함수형 프로그래밍 사용시 Collection.forEach 사용 */
    private static List<Lotto> createManualLottos(List<String> manualLotto, LottoCount count) {
        List<Lotto> lottos = new ArrayList<>();
        manualLotto.forEach(lotto -> lottos.add(Lotto.of(lotto)));
        return lottos;
    }
    
    /* 아래와 같음 */
    for (string lotto : manualLotto) {
        lottos.add(Lotto.of(lotto));
    }

    Stream Foreach 이용 - 지양

     for-loop보다 오버헤드가 많이 발생하여, CPU 낭비 발생

     Stream.forEach(Consumer<? super T> action)

    처리 순서 보장하지 않음

     병렬 스레드에서 예상치 못한 상황이 발생할 수 있음 

     > 함수형 인터페이스는 디버깅이 어려울 수 있는데 맞물리면 좋지 않을 듯

    private static List<Lotto> createManualLottos(List<String> manualLotto, LottoCount count) {
        List<Lotto> lottos = new ArrayList<>();
        manualLotto.stream()
            .forEach(lotto -> lottos.add(Lotto.of(lotto)));
        return lottos;
    }
    반응형

    '우아한 테크코스 > 테크코스' 카테고리의 다른 글

    [Java] StackTrace 읽기  (0) 2020.03.05
    [Mac] 단축키 기호 및 모음  (0) 2020.03.05
    [Vim] Game - pacvim vs VIM Adventures  (0) 2020.03.02
    [독서] 코딩을 지탱하는 기술  (0) 2020.02.24
    [독서] 클린 코더  (0) 2020.02.24

    댓글

Designed by Tistory.