본문 바로가기

자바

[자바] Stream의 match함수 예제(anyMatch, noneMatch, allMatch)

회사에서 개발하던 중 리스트의 데이터 모두 빈값("") 인경우..라는 조건이 필요하였다.

결론: !Arrays.stream(arr).allMatch(String::isEmpty)
물론 for문을 돌려도되지만 요즘 코드를 한줄로 줄이기에 재미가 들려서 이것저것 찾아보다가
stream의 allMatch라는 녀석을 이용하면 한줄로 표현할 수 있어서 매우 기분이좋아(?) 기록으로 남기려고한다.
java.util.Stream에는 제목처럼 세 가지 match 함수가 있다.
그리고 이 세함수의 인자는 Predicate로 T타입을 입력받고, boolean을 출력한다.
다음예제를 통해 조금더 함수의 결과를 잘 알수 있다.

public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("김");
    list.add("이");
    list.add("정");
    list.add("박");
    list.add("최");

    System.out.println(list.stream().anyMatch(s -> s.equals("최"))); // true
    System.out.println(list.stream().anyMatch(s -> s.equals("안"))); // false
    System.out.println(list.stream().noneMatch(s -> s.equals("최"))); // false
    System.out.println(list.stream().noneMatch(s -> s.equals("안"))); // true
}



1. anyMatch는 하나라도 true면 전체가 true
2. noneMatch는 하나라도 false면 전체가 false

public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("김1");
    list.add("이1");
    list.add("정1");
    list.add("박1");
    list.add("최1");
    // list.add("최"); false

    System.out.println(list.stream().allMatch(s -> s.indexOf("1") > -1)); // true
}



3. allMatch는 모두가 true여야 true
list의 1을 아무거나 하나만 지워도 결과는 false

함수이름도 직관적이라 써먹기 크게 어렵지않다.

후기:
의외로 jsp에서도 람다함수를 쓸수 있다는 사실과 이전에도 Stream에대해 관심을 가졌었다는 사실이 후에 내가 코딩하는데 크게 도움이 된다는사실을 다시한번 새삼스럽지만 알게되었다.
두 사실을 처음 알았을 때는 그냥그렇구나, 신기하네. 근데 어따 써먹지?했는데 몇년이 지나서야 비로소 요긴하게 써먹고 있으니 신입때 뭐라도 닥치는대로 공부했던 날들이 이제서야 크게 다가오는거같아 몹시 뿌듯하다.
다음에는 Stream의 다른 함수를 포스팅해볼생각이다.

'자바' 카테고리의 다른 글

jpa 엔티티 매핑 정리  (0) 2024.03.24
어댑터 패턴  (0) 2022.12.14
dto 복사에 관하여  (0) 2022.12.08
[스레드] 12. 스레드풀(3)  (0) 2022.05.07
[스레드] 11. 스레드풀(2)  (0) 2022.05.05