본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

Function의 합성 andThen compose identity 과 Predicate의 조건결합 and or negate isEqual

 

Function의 합성 (Function Composition)
Function의 합성은 두 개 이상의 함수를 연결하여 새로운 함수를 생성하는 과정
기존의 함수를 조합하여 새로운 함수를 만든다.
f(x)와 g(x) -> f(g(x))

 

andThen
두 함수를 연결하는 역할
 번째 함수를 적용하고 그 결과를 두 번째 함수의 입력으로 전달

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        // 두 함수를 정의
        Function<Integer, Integer> multiplyBy2 = x -> x * 2;
        Function<Integer, Integer> add3 = x -> x + 3;

        // 두 함수를 연결하여 새로운 함수 생성
        Function<Integer, Integer> composedFunction = multiplyBy2.andThen(add3);

        // 연결된 함수를 사용하여 연산 수행
        int result = composedFunction.apply(5);
        System.out.println("Result: " + result); // Output: 13
    }
}

 

 

 

compose
먼저 두 번째 함수를 적용하고 그 결과를 첫 번째 함수의 입력으로 전달

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        // 두 함수를 정의
        Function<Integer, Integer> multiplyBy2 = x -> x * 2;
        Function<Integer, Integer> add3 = x -> x + 3;

        // 두 함수를 연결하여 새로운 함수 생성
        Function<Integer, Integer> composedFunction = multiplyBy2.compose(add3);

        // 연결된 함수를 사용하여 연산 수행
        int result = composedFunction.apply(5);
        System.out.println("Result: " + result); // Output: 16
    }
}

 

 

 

identity
함수를 합성할 때 기본적인 역할
인자로 받은 값을 그대로 반환

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        // 항등 함수 생성
        Function<Integer, Integer> identityFunction = Function.identity();

        // 항등 함수를 사용하여 연산 수행
        int result = identityFunction.apply(5);
        System.out.println("Result: " + result); // Output: 5
    }
}

 

 

 

 

 

Predicate의 결합 (Predicate Composition)
Predicate의 결합은 여러 개의 Predicate를 조합하여 하나의 Predicate를 생성하는 것
여러 조건을 하나로 결합하여 복잡한 조건을 간단하게 표현한다.
p1(x)와 p2(x) -> p1(x) AND p2(x) 또는 p1(x) OR p2(x)

 

 

 

and
Predicate와 다른 Predicate를 AND로 조합

import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        // 두 개의 Predicate를 생성
        Predicate<Integer> isEven = x -> x % 2 == 0;
        Predicate<Integer> isPositive = x -> x > 0;

        // 두 Predicate를 AND로 조합하여 새로운 Predicate 생성
        Predicate<Integer> isEvenAndPositive = isEven.and(isPositive);

        // 조합된 Predicate를 이용하여 조건 검사
        System.out.println("Is 6 even and positive? " + isEvenAndPositive.test(6)); // Output: true
        System.out.println("Is -3 even and positive? " + isEvenAndPositive.test(-3)); // Output: false
    }
}

 

 

 

or
현재 Predicate와 다른 Predicate를 OR로 조합

import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        // 두 개의 Predicate를 생성
        Predicate<Integer> isEven = x -> x % 2 == 0;
        Predicate<Integer> isPositive = x -> x > 0;

        // 두 Predicate를 OR로 조합하여 새로운 Predicate 생성
        Predicate<Integer> isEvenOrPositive = isEven.or(isPositive);

        // 조합된 Predicate를 이용하여 조건 검사
        System.out.println("Is 6 even or positive? " + isEvenOrPositive.test(6)); // Output: true
        System.out.println("Is -3 even or positive? " + isEvenOrPositive.test(-3)); // Output: true
    }
}

 

 

 


negate
현재 Predicate의 결과를 반전시킨 새로운 Predicate를 반환


import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        // 하나의 Predicate를 생성
        Predicate<Integer> isEven = x -> x % 2 == 0;

        // Predicate의 결과를 반전시킨 새로운 Predicate 생성
        Predicate<Integer> isNotEven = isEven.negate();

        // 반전된 Predicate를 이용하여 조건 검사
        System.out.println("Is 6 not even? " + isNotEven.test(6)); // Output: false
    }
}

 

 

 


isEqual
현재 Predicate의 입력 값과 주어진 값이 동일한지를 검사하는 새로운 Predicate를 반환


import java.util.function.Predicate;

public class Main {
    public static void main(String[] args) {
        // 하나의 Predicate를 생성
        Predicate<String> isHello = Predicate.isEqual("Hello");

        // Predicate를 이용하여 조건 검사
        System.out.println("Is it Hello? " + isHello.test("Hello")); // Output: true
        System.out.println("Is it Hello? " + isHello.test("Hi")); // Output: false
    }
}