• JAVA中Function的使用



    参考: https://blog.csdn.net/boyan_HFUT/article/details/99618833

    一、方法介绍

    表示接受一个参数并产生结果的函数。

    参数类型

    • T - 函数输入的类型
    • R - 函数的结果类型

    方法介绍

    • R apply(T t)
      将此函数应用于给定的参数。
    • default Function compose(Function before)
      返回一个组合函数,首先将before函数应用于其输入,然后将此函数应用于结果。 如果任一函数的评估引发异常,则将其转发给组合函数的调用者。
    • default Function andThen(Function after)
      返回一个组合函数,首先将此函数应用于其输入,然后将after函数应用于结果。 如果任一函数的评估引发异常,则将其转发给组合函数的调用者。
    • static Function identity()
      返回一个总是返回其输入参数的函数。

    源码

    @FunctionalInterface
    public interface Function<T, R> {
    
        /**
         * Applies this function to the given argument.
         *
         * @param t the function argument
         * @return the function result
         */
        R apply(T t);
    
        /**
         * Returns a composed function that first applies the {@code before}
         * function to its input, and then applies this function to the result.
         * If evaluation of either function throws an exception, it is relayed to
         * the caller of the composed function.
         *
         * @param  the type of input to the {@code before} function, and to the
         *           composed function
         * @param before the function to apply before this function is applied
         * @return a composed function that first applies the {@code before}
         * function and then applies this function
         * @throws NullPointerException if before is null
         *
         * @see #andThen(Function)
         */
        default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
            Objects.requireNonNull(before);
            return (V v) -> apply(before.apply(v));
        }
    
        /**
         * Returns a composed function that first applies this function to
         * its input, and then applies the {@code after} function to the result.
         * If evaluation of either function throws an exception, it is relayed to
         * the caller of the composed function.
         *
         * @param  the type of output of the {@code after} function, and of the
         *           composed function
         * @param after the function to apply after this function is applied
         * @return a composed function that first applies this function and then
         * applies the {@code after} function
         * @throws NullPointerException if after is null
         *
         * @see #compose(Function)
         */
        default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
            Objects.requireNonNull(after);
            return (T t) -> after.apply(apply(t));
        }
    
        /**
         * Returns a function that always returns its input argument.
         *
         * @param  the type of the input and output objects to the function
         * @return a function that always returns its input argument
         */
        static <T> Function<T, T> identity() {
            return t -> t;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    二、demo

    public class Test {
        public static void main(String[] args) throws Exception {
            Function<Integer, Integer> add = p -> p + 10;
            Integer result = add.apply(10);
            // 这里会输出 20,因为这个函数定义的操作时把参数加上 10 后返回
            System.out.println(result);
    
    
            Function<Integer, Integer> multiplyTen = a -> a * 10;
            Function<Integer, Integer> addTen = a -> a + 10;
            // 先增加 10,然后再乘 10,输出结果 110
            Function<Integer, Integer> addTenThenMultiplyTen = multiplyTen.compose(addTen);
            System.out.println(addTenThenMultiplyTen.apply(1));
    
    
            // 先乘 10,然后再加 10,输出结果 20
            Function<Integer, Integer> multiplyTenAddTenThen = multiplyTen.andThen(addTen);
            System.out.println(multiplyTenAddTenThen.apply(1));
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    结果
    在这里插入图片描述

  • 相关阅读:
    kubernetes CoreDNS全解析
    正则表达式快速入门笔记
    【精品】轻松部署ceph分布式存储集群
    springboot security使用
    数据源太多,报表工具该如何兼容?
    基于 Openzeppelin 的可升级合约解决方案的注意事项
    LABVIEW 安装教程(超详细)
    python小玩意——点菜单程序
    中小微企业中的营业额与收入评估的风险模型预测
    【华为机试真题 JAVA】事件推送-100
  • 原文地址:https://blog.csdn.net/weixin_44792849/article/details/127888526