SeouliteLab
[Java/자바] 다수의 Predicate를 and()로 연결하여 수행하기 본문
Java에서는 Predicate의 and() 메서드를 사용하여 다수의 Predicate를 연결하고, 모든 조건이 true일 때 true를 반환합니다. 이를 통해 여러 조건을 한꺼번에 검사할 수 있습니다.
1. Predicate.and() 메서드 소개
Predicate.and() 메서드는 Predicate 인터페이스의 디폴트 메서드로, 현재 Predicate와 다른 Predicate를 and 연산하여 새로운 Predicate를 생성합니다.
2. Predicate.and() 메서드 예제
예제 1: 숫자가 양수이면서 짝수인지 확인하기
import java.util.function.Predicate;
public class PositiveEvenNumberCheck {
public static void main(String[] args) {
Predicate<Integer> isPositive = num -> num > 0;
Predicate<Integer> isEven = num -> num % 2 == 0;
Predicate<Integer> isPositiveEven = isPositive.and(isEven);
System.out.println(isPositiveEven.test(6)); // true 출력
System.out.println(isPositiveEven.test(-2)); // false 출력
System.out.println(isPositiveEven.test(3)); // false 출력
}
}
위 예제에서는 숫자가 양수이면서 짝수인지 확인하는 Predicate를 만들기 위해 isPositive와 isEven 두 개의 Predicate를 and() 메서드로 연결합니다.
예제 2: 문자열이 특정 길이 이상이면서 소문자인지 확인하기
import java.util.function.Predicate;
public class StringLengthAndCaseCheck {
public static void main(String[] args) {
Predicate<String> isLongerThan5 = str -> str.length() > 5;
Predicate<String> isLowerCase = str -> str.equals(str.toLowerCase());
Predicate<String> isLongerThan5AndLowerCase = isLongerThan5.and(isLowerCase);
System.out.println(isLongerThan5AndLowerCase.test("java8")); // true 출력
System.out.println(isLongerThan5AndLowerCase.test("Python")); // false 출력
System.out.println(isLongerThan5AndLowerCase.test("Java")); // false 출력
}
}
위 예제에서는 문자열이 특정 길이 이상이면서 소문자인지 확인하는 Predicate를 만들기 위해 isLongerThan5와 isLowerCase 두 개의 Predicate를 and() 메서드로 연결합니다.
예제 3: 나이가 18세 이상이면서 성인인지 확인하기
import java.util.function.Predicate;
public class AdultCheck {
public static void main(String[] args) {
Predicate<Integer> isAdult = age -> age >= 18;
Predicate<String> isAdultName = name -> name.startsWith("Mr.");
Predicate<String> isAdultWithMr = isAdult.and(isAdultName);
System.out.println(isAdultWithMr.test(25)); // false 출력
System.out.println(isAdultWithMr.test(30)); // true 출력
}
}
위 예제에서는 나이가 18세 이상이면서 성인 이름인지 확인하는 Predicate를 만들기 위해 isAdult와 isAdultName 두 개의 Predicate를 and() 메서드로 연결합니다.
예제 4: 파일이 존재하고 읽기 권한이 있는지 확인하기
import java.io.File;
import java.util.function.Predicate;
public class FilePermissionCheck {
public static void main(String[] args) {
Predicate<File> fileExists = File::exists;
Predicate<File> canRead = File::canRead;
Predicate<File> filePermission = fileExists.and(canRead);
File file = new File("path/to/file.txt");
System.out.println(filePermission.test(file)); // true 또는 false 출력
}
}
위 예제에서는 파일이 존재하고 읽기 권한이 있는지 확인하는 Predicate를 만들기 위해 fileExists와 canRead 두 개의 Predicate를 and() 메서드로 연결합니다.
예제 5: 문자열이 특정 단어를 포함하고 특정 길이 이상인지 확인하기
import java.util.function.Predicate;
public class StringContainAndLengthCheck {
public static void main(String[] args) {
Predicate<String> containsJava = str -&
gt; str.contains("Java");
Predicate<String> isLongerThan10 = str -> str.length() > 10;
Predicate<String> containsJavaAndLongerThan10 = containsJava.and(isLongerThan10);
System.out.println(containsJavaAndLongerThan10.test("Java Programming")); // true 출력
System.out.println(containsJavaAndLongerThan10.test("Python Programming")); // false 출력
System.out.println(containsJavaAndLongerThan10.test("Java")); // false 출력
}
}
위 예제에서는 문자열이 특정 단어를 포함하고 특정 길이 이상인지 확인하는 Predicate를 만들기 위해 containsJava와 isLongerThan10 두 개의 Predicate를 and() 메서드로 연결합니다.
예제 6: 사용자가 관리자인지 확인하기
import java.util.function.Predicate;
public class AdminCheck {
public static void main(String[] args) {
Predicate<User> isAdmin = user -> user.getRole().equals("admin");
Predicate<User> isActive = user -> user.isActive();
Predicate<User> isAdminAndActive = isAdmin.and(isActive);
User user1 = new User("John", "admin", true);
User user2 = new User("Alice", "user", true);
System.out.println(isAdminAndActive.test(user1)); // true 출력
System.out.println(isAdminAndActive.test(user2)); // false 출력
}
static class User {
private String name;
private String role;
private boolean active;
public User(String name, String role, boolean active) {
this.name = name;
this.role = role;
this.active = active;
}
public String getRole() {
return role;
}
public boolean isActive() {
return active;
}
}
}
위 예제에서는 사용자가 관리자이면서 활성화된 사용자인지 확인하는 Predicate를 만들기 위해 isAdmin와 isActive 두 개의 Predicate를 and() 메서드로 연결합니다.
'프로그래밍' 카테고리의 다른 글
[Java/자바] Supplier 예제 (0) | 2024.03.13 |
---|---|
[Java/자바] 다수의 Predicate를 or()로 연결하여 수행하기 (0) | 2024.03.13 |
[Java/자바] Predicate.isEqual() 메서드: 동등성 검사 (0) | 2024.03.13 |
[Java/자바] Predicate.negate() 메서드 이해하기 (0) | 2024.03.13 |
[Java/자바] Java 8 Predicate를 이해하고 활용하기 (0) | 2024.03.13 |