Java 函数式接口使用

java的函数式接口包括Supplier,Function,BiConsumer,BiFunction等接口
函数式接口类似于c++里的函数指针
Supplier相当于指定返回参数类型的无输入参数方法(定义上必须是静态方法)
Function相当于指定返回参数类型的无输入参数方法(定义上必须是类的公共方法方法)
BiConsumer相当于无返回参数类型的一个输入参数方法(定义上必须是类的公共方法方法)
BiFunction相当于指定返回参数类型的一个输入参数方法(定义上必须是类的公共方法方法)

如果存在多个输入参数,可以定义多个参数的接口

public interface TwoParamFunction<T, U, K,R> {
    R apply(T t, U u, K k);
}

public class Test {

    public static String testSupplier(){
        return "Supplier";
    }
    
    public String testFunction(){
        return "Function";
    }
    
    public void testBiConsumer(Integer i){
        i++;
    }
    
    public String testBiFunction(Integer i){
        return String.valueOf(i++);
    }
    
    public String testTwoParamFunction(Integer i,Long l){
        return String.valueOf(i+l);
    }
    
    void main(){
        Supplier<String> supplier = Test::testSupplier;
        String result = supplier.get();
        int i = 0;
        long l = 1;
        
        Test test = new Test();
        Function<Test,String> function = Test::testFunction;
        result = function.apply(test);
        
        BiConsumer<Test,Integer> biConsumer = Test::testBiConsumer
        biConsumer.accept(test,i);
        
        BiFunction<Test,Integer,String> biFunction = Test::testBiFunction
        result = biFunction.apply(test,i);
        
        TwoParamFunction<Test,Integer,Long,String> twoParamFunction = Test::testTwoParamFunction
        result = twoParamFunction.apply(test,i,l);
        
        testEnum(test,2);
    }
    
    statuc void testEnum(Test test,Integer i){
        BaseEnum baseEnum = BaseEnum.getByCode(i);
        baseEnum.function..apply(test,i);
    }
}

应用范围,可以减少条件判断
例如枚举

public enum  BaseEnum  {

    ONE(1,"one",Test::testBiFunction),TWO(2,"two",Test::testBiFunction);

    private BaseEnum(Integer code,String name,Function<Test,Integer> function){
        this.code = code;
        this.name = name;
        this.function = function
    }

    Integer code;
    String name;
    Function<Test,Integer> function;
    
    public static BaseEnum getByCode(Integer type) {
        for (BaseEnum value : values()) {
            if (value.getType().equals(type)) {
                return value;
            }
        }
        return null;
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值