관리 메뉴

피터의 개발이야기

[JAVA] Stream allMatch(), anyMatch(), noneMatch() 본문

Programming/JAVA

[JAVA] Stream allMatch(), anyMatch(), noneMatch()

기록하는 백앤드개발자 2020. 12. 1. 10:00
반응형

Stream을 사용하면 늘 쓰는 것만 사용하게 된다. 

나 같은 경우 filter를 주로 많이 사용하는데,

fiter는 중간처리자이다. 곧,  Stream을 반환하기에 최종 처리 단계를 더 거쳐야 한다.

특히 단순히 list 중에 값이 있는지만 알기 위해 간단한 방법이 있다.

API는 최종 처리 단계 특정 조건을 만족하는 요소들을 얻을 수 있도록 세가지 매칭 메소드를 제공한다.


allMatch() 모든 요소들이 주어진 조건을 만족하는지 조사,
anyMatch() 모든 요소 중 개라도 조건에 만족하는지 조사,
noneMatch() 주어진 조건에 모든 요소들이 안 맞는지 조사,

 

allMatch() 사용 시 주의점이 있다.

리스트가 널일 경우  true를 반환한다.

자칫 버그처럼 보이지만 

논리학에서 가정이 거짓이면 결과가 참이듯,

자바도 논리학에 따른 의도된 결과이다.

 

 

    @Test
    public void matchTest() {
        int[] NOTIFY_TYPE_MINUTE = { 0, 1, 5, 10, 30, 60 };

        boolean result = Arrays.stream(NOTIFY_TYPE_MINUTE)
                .allMatch(a -> a%2 == 0);
        System.out.println("2의 배수? " + result); // false

        result = Arrays.stream(NOTIFY_TYPE_MINUTE)
                .anyMatch(a -> a == 5);
        System.out.println("5가 있니? " + result); // true

        result = Arrays.stream(NOTIFY_TYPE_MINUTE)
                .noneMatch(a -> a%7 == 0);
        System.out.println("7의 배수가 없나? " + result); // false

        // 만약 빈 리스트라면
        result = Stream.<Integer>empty()
                .allMatch(a -> a%2 == 0);
        System.out.println("2의 배수? " + result); // ture
        
    }

 

반응형
Comments