Java Function.compose() 方法及代码示例

生成一个组合函数, 该函数首先将 before 函数应用于当前函数的输入, 然后将当前函数应用于结果.

初见版本

1.8

定义

default <V> Function<V,R> compose​(Function<? super V,? extends T> before)

参数

参数类型参数名称参数描述
类型参数T输入到函数的类型
类型参数R从函数返回的结果的类型
类型参数Vbefore 函数和组合函数的输入类型
Function<? super V,? extends T>before应用当前函数后再应用的函数

返回值

返回一个先将输入应用于 before 函数, 再将产生的结果应用于当前函数的 Function.

抛出的异常

NullPointerException 如果 before 参数为 null

说明

compose() 方法主要用于组装两个函数生成一个新的函数, 组合的新函数实际上是, before函数为当前 Function 做了前置的处理, 再调用当前 Function.

注意事项

如果对任一函数的执行引发异常, 则将其转发给组合函数的调用者.

示例

使用 Function.compose() 方法的示例

package com.yi21.function;

import java.util.function.Function;

public class Yi21FunctionCompose {

    public static void main(String[] args) {

        Function<String, String> hello = new Function<>() {
            @Override
            public String apply(String s) {
                if(s.equals("")) {
                    return "";
                } else {
                    return "Hello, " + s;
                }
            }
        };

        //超过5个字符将无法通过此过滤器
        Function<String, String> longerThanFivefilter = new Function<>() {

            @Override
            public String apply(String t) {
                return t.length() > 5? "": t + "!";
            }
            
        };

        Function<String, String> filterTooLong = hello.compose(longerThanFivefilter);

        System.out.println("超过5个字符的将不会显示." + filterTooLong.apply("Aristotle"));
    
        System.out.println("正常调用:");
        System.out.println(filterTooLong.apply("Jack"));

        System.out.println("实际执行过程:");
        String r = longerThanFivefilter.apply("Jack");
        System.out.println(hello.apply(r));
        
    }

}

执行结果为 :

超过5个字符的将不会显示.
正常调用:
Hello, Jack!
实际执行过程:
Hello, Jack!