SeouliteLab

[Java/자바] Java 8 Predicate를 이해하고 활용하기 본문

프로그래밍

[Java/자바] Java 8 Predicate를 이해하고 활용하기

Seoulite Lab 2024. 3. 13. 08:30

Java 8에서 소개된 Predicate는 함수형 프로그래밍을 지원하는 인터페이스 중 하나입니다. 이 인터페이스는 주어진 조건에 따라 true 또는 false를 반환합니다. 이를 통해 코드를 더 간결하고 유연하게 작성할 수 있습니다.

1. Predicate 인터페이스 소개

Predicate는 java.util.function 패키지에 포함되어 있으며, 다음과 같이 선언됩니다:

import java.util.function.Predicate;

Predicate는 하나의 입력 매개변수를 받아 해당 매개변수에 대한 조건을 검사하는 test 메서드를 제공합니다.

2. Predicate 예제

예제 1: 숫자가 양수인지 확인하기

import java.util.function.Predicate;

public class PositiveNumberCheck {
    public static void main(String[] args) {
        Predicate<Integer> isPositive = num -> num > 0;
        System.out.println(isPositive.test(5));  // true 출력
        System.out.println(isPositive.test(-2)); // false 출력
    }
}

예제 2: 문자열이 특정 길이보다 긴지 확인하기

import java.util.function.Predicate;

public class StringLengthCheck {
    public static void main(String[] args) {
        Predicate<String> isLongerThan5 = str -> str.length() > 5;
        System.out.println(isLongerThan5.test("Java")); // false 출력
        System.out.println(isLongerThan5.test("Java 8")); // true 출력
    }
}

예제 3: 리스트에서 홀수만 필터링하기

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class OddNumberFilter {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Predicate<Integer> isOdd = num -> num % 2 != 0;
        List<Integer> oddNumbers = numbers.stream().filter(isOdd).collect(Collectors.toList());
        System.out.println(oddNumbers); // [1, 3, 5, 7, 9] 출력
    }
}

예제 4: null이 아닌 문자열 필터링하기

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class NonNullStringFilter {
    public static void main(String[] args) {
        List<String> strings = Arrays.asList("Java", null, "Python", null, "C++");
        Predicate<String> isNotNull = str -> str != null;
        List<String> nonNullStrings = strings.stream().filter(isNotNull).collect(Collectors.toList());
        System.out.println(nonNullStrings); // [Java, Python, C++] 출력
    }
}

예제 5: 두 조건을 조합하여 필터링하기

import java.util.function.Predicate;

public class CombinationPredicate {
    public static void main(String[] args) {
        Predicate<Integer> isGreaterThan10 = num -> num > 10;
        Predicate<Integer> isEven = num -> num % 2 == 0;
        Predicate<Integer> isGreaterThan10AndEven = isGreaterThan10.and(isEven);
        System.out.println(isGreaterThan10AndEven.test(12)); // true 출력
        System.out.println(isGreaterThan10AndEven.test(7)); // false 출력
    }
}

예제 6: 파일 필터링하기

import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

public class FileFilter {
    public static void main(String[] args) {
        File directory = new File("path/to/directory");
        File[] files = directory.listFiles();
        Predicate<File> isFile = file -> file.isFile();
        List<File> fileList = Arrays.stream(files).filter(isFile).collect(Collectors.toList());
        System.out.println(fileList); // 디렉토리에 있는 파일 목록 출력
    }
}