Java 8 - BiFunction 예제

By JS | Last updated: May 27, 2021

Java 8의 BiFunction은 2개의 인자(Type T, U)를 받고 1개의 객체(Type R)를 리턴하는 함수형 인터페이스입니다.

public interface BiFunction<T, U, R> {

    R apply(T t, U u);

}

Example 1 : BiFunction

다음 예제는 BiFunction 구현 및 apply()가 어떻게 동작하는지 알려줍니다. apply()에 2개의 인자를 전달하면 그 결과가 리턴됩니다.

import java.util.function.BiFunction;

public class BiFunctionExample1 {

    public static void main(String[] args) {

        BiFunction<String, String, String> func1 = (s1, s2) -> {
            String s3 = s1 + s2;
            return s3;
        };
        String result = func1.apply("Hello", "World");
        System.out.println(result);

        BiFunction<Integer, Integer, Double> func2 = (a1, a2) -> Double.valueOf(a1 + a2);
        Double sum = func2.apply(10, 100);
        System.out.println(sum);
    }
}

Output:

HelloWorld
110.0

Example 2 : andThen()

다음 예제는 andThen()이 어떻게 동작하는지 알려줍니다. apply()의 인자들은 func1에 먼저 전달되며, func1의 결과가 func2의 인자로 전달됩니다. 그리고 func2의 결과가 리턴됩니다.

import java.util.function.BiFunction;
import java.util.function.Function;

public class BiFunctionExample2 {

    public static void main(String[] args) {

        BiFunction<Integer, Integer, Double> func1 = (a1, a2) -> Math.pow(a1, a2);
        Function<Double, String> func2 = (a1) -> "Result: " + a1;

        String result = func1.andThen(func2).apply(2, 3);

        System.out.println(result);
    }
}

Output:

Result: 8.0

Example 3

이 예제는 powAndReturnString()라는 함수를 정의하여, 위의 func1은 고정하고, func2를 인자로 전달하여 다양한 함수를 생성하는 예제입니다. powAndReturnString()에 전달되는 Lambda 객체에 따라서, 결과가 다르게 리턴될 수 있습니다.

import java.util.function.BiFunction;
import java.util.function.Function;

public class BiFunctionExample3 {

    public static void main(String[] args) {

        String result = powAndReturnString(2, 3, (num)-> "result: " + num);
        System.out.println(result);

        result = powAndReturnString(2, 3, (num)-> "PowPow: " + num);
        System.out.println(result);

    }

    public static String powAndReturnString(Integer num1, Integer num2,
                                            Function<Double, String> funcConvert) {
        BiFunction<Integer, Integer, Double> funcPow = (a1, a2) -> Math.pow(a1, a2);
        return funcPow.andThen(funcConvert).apply(num1, num2);
    }
}

Output:

result: 8.0
PowPow: 8.0

참고

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha