int 리스트의 모든 원소가 1~45 사이값인지 어떻게 확인할까?

Hyunta·2022년 2월 22일
0

로또 미션

목록 보기
2/6

로또 번호를 자동으로 생성하는 기능을 테스트하다가, 생성한 값들이 범위내에 있는지 확인하는 메서드를 만들어했다.

        Assertions.assertThat(isInRange(lotto)).isTrue();

    }

    private boolean isInRange(Lotto lotto) {
        boolean allInRange = true;
        List<Integer> pickedNumbers = lotto.getPickedNumbers();
        for (Integer pickedNumber : pickedNumbers) {
            if (pickedNumber < 1 || pickedNumber > 45) {
                allInRange = false;
            }
        }
        return allInRange;
    }

테스트코드 내부에서 범위내에 있는지 확인하는 private 메서드를 만들어서 확인하면 되지 않을까 했지만, 요구사항 중에 indent가 2이상이면 안된다는 조건에도 어긋나고 코드 자체도 뭔가 너무 길어보인다.

Stream으로 줄여볼 수 있지 않을까 해서 범위내에 있는지 확인하는 메서드를 어떻게 만들까 찾아봤다.

Assertions.assertThat(lotto.getPickedNumbers().stream().allMatch(i -> i >= 1 && i <= 45)).isTrue();

스트림으로 구현을 하니 위에 길었던 코드가 한줄로 작성되었다. stream은 정말 메서드를 구현하게 쉽게 만들어주고, 한눈에 잘 알아볼 수 있게 만들어준다. 기회가 된다면 stream을 한번 제대로 공부해보고 싶다.

Reference

https://stackoverflow.com/questions/43648759/how-to-check-if-a-list-contains-elements-only-from-a-given-range-java

profile
세상을 아름답게!

0개의 댓글