SeouliteLab

[Java/자바] 다수의 Predicate를 or()로 연결하여 수행하기 본문

프로그래밍

[Java/자바] 다수의 Predicate를 or()로 연결하여 수행하기

Seoulite Lab 2024. 3. 13. 08:39

Java에서는 Predicate의 or() 메서드를 사용하여 다수의 Predicate를 연결하고, 하나 이상의 조건이 true이면 true를 반환합니다. 이를 통해 여러 조건 중 하나라도 충족되는지 검사할 수 있습니다.

1. Predicate.or() 메서드 소개

Predicate.or() 메서드는 Predicate 인터페이스의 디폴트 메서드로, 현재 Predicate와 다른 Predicate를 or 연산하여 새로운 Predicate를 생성합니다.

2. Predicate.or() 메서드 예제

예제 1: 숫자가 음수이거나 홀수인지 확인하기

import java.util.function.Predicate;

public class NegativeOrOddNumberCheck {
    public static void main(String[] args) {
        Predicate<Integer> isNegative = num -> num < 0;
        Predicate<Integer> isOdd = num -> num % 2 != 0;
        Predicate<Integer> isNegativeOrOdd = isNegative.or(isOdd);

        System.out.println(isNegativeOrOdd.test(-3)); // true 출력
        System.out.println(isNegativeOrOdd.test(2)); // false 출력
        System.out.println(isNegativeOrOdd.test(5)); // true 출력
    }
}

위 예제에서는 숫자가 음수이거나 홀수인지 확인하는 Predicate를 만들기 위해 isNegative와 isOdd 두 개의 Predicate를 or() 메서드로 연결합니다.

예제 2: 문자열이 공백이거나 null인지 확인하기

import java.util.function.Predicate;

public class NullOrEmptyStringCheck {
    public static void main(String[] args) {
        Predicate<String> isNullOrEmpty = str -> str == null || str.trim().isEmpty();

        System.out.println(isNullOrEmpty.test(null)); // true 출력
        System.out.println(isNullOrEmpty.test("")); // true 출력
        System.out.println(isNullOrEmpty.test("Hello")); // false 출력
    }
}

위 예제에서는 문자열이 공백이거나 null인지 확인하는 Predicate를 만들기 위해 isNullOrEmpty 하나의 Predicate만을 사용합니다.

예제 3: 숫자가 3의 배수이거나 5의 배수인지 확인하기

import java.util.function.Predicate;

public class MultipleOfThreeOrFiveCheck {
    public static void main(String[] args) {
        Predicate<Integer> isMultipleOfThree = num -> num % 3 == 0;
        Predicate<Integer> isMultipleOfFive = num -> num % 5 == 0;
        Predicate<Integer> isMultipleOfThreeOrFive = isMultipleOfThree.or(isMultipleOfFive);

        System.out.println(isMultipleOfThreeOrFive.test(9)); // true 출력
        System.out.println(isMultipleOfThreeOrFive.test(10)); // true 출력
        System.out.println(isMultipleOfThreeOrFive.test(7)); // false 출력
    }
}

위 예제에서는 숫자가 3의 배수이거나 5의 배수인지 확인하는 Predicate를 만들기 위해 isMultipleOfThree와 isMultipleOfFive 두 개의 Predicate를 or() 메서드로 연결합니다.

예제 4: 사용자가 관리자 또는 슈퍼유저인지 확인하기

import java.util.function.Predicate;

public class AdminOrSuperuserCheck {
    public static void main(String[] args) {
        Predicate<User> isAdmin = user -> user.getRole().equals("admin");
        Predicate<User> isSuperuser = user -> user.getRole().equals("superuser");
        Predicate<User> isAdminOrSuperuser = isAdmin.or(isSuperuser);

        User user1 = new User("John", "admin");
        User user2 = new User("Alice", "superuser");
        User user3 = new User("Bob", "user");

        System.out.println(isAdminOrSuperuser.test(user1)); // true 출력
        System.out.println(isAdminOrSuperuser.test(user2)); // true 출력
        System.out.println(isAdminOrSuperuser.test(user3)); // false 출력
    }

    static class User {
        private String name;
        private String role;

        public User(String name, String role) {
            this.name = name;
            this.role = role;
        }

        public String getRole() {
            return role;
        }
    }
}

위 예제에서는 사용자가 관리자 또는 슈퍼유저인지 확인하는 Predicate를 만들기 위해 isAdmin와 isSuperuser 두 개의 Predicate를 or() 메서드로 연결합니다.

예제 5: 사용자가 어린이 또는 청소년인지 확인하기

import java.util.function.Predicate;

public class ChildOrTeenagerCheck {
    public static void main(String[] args) {
        Predicate<Integer> isChild = age -> age < 12;
        Predicate<Integer> isTeenager = age -> age >= 12 && age < 20;
        Predicate<Integer> isChildOrTeenager = isChild.or(isTeenager);

        System.out.println(isChildOrTeenager.test(8)); // true 출력
        System.out.println(isChildOrTeenager.test(15)); // true 출력
        System.out.println(isChildOrTeenager.test(25)); // false 출력
    }
}

위 예제에서는 사용자가 어린이 또는 청소년인지 확인하는 Predicate를 만들기 위해 isChild와 isTeenager 두 개의 Predicate를 or() 메서드로 연결합니다.

예제 6: 나이가 65세 이상이거나 은퇴한 사용자인지 확인하기

import java.util.function.Predicate;

public class RetiredOrSeniorCheck {
    public static void main(String[] args) {
        Predicate<Integer> isSenior = age -> age >= 65;
        Predicate<User> isRetired = user -> user.isRetired();
        Predicate<User> isRetiredOrSenior = isSenior.or(isRetired);

        User user1 = new User("John", 70, true);
        User user2 = new User("Alice", 55, false);

        System.out.println(isRetiredOrSenior.test(user1)); // true 출력
        System.out.println(isRetiredOrSenior.test(user2)); // true 출력
    }

    static class User {
        private String name;
        private int age;
        private boolean retired;

        public User(String name, int age, boolean retired) {
            this.name = name;
            this.age = age;
            this.retired = retired;
        }

        public boolean isRetired() {
            return retired;
        }
    }
}

위 예제에서는 나이가 65세 이상이거나 은퇴한 사용자인지 확인하는 Predicate를 만들기 위해 isSenior와 isRetired 두 개의 Predicate를 or() 메서드로 연결합니다.