회사에서 개발하던 중 리스트의 데이터 모두 빈값("") 인경우..라는 조건이 필요하였다.
결론: !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 |