zoukankan      html  css  js  c++  java
  • Java 8 Funciton、Consumer、Predicate的作用及用法

    一、简述

    Funciton、Consumer、Predicate是Java8中的新特性。他们都是函数式接口,位于java.util包中。

    关于函数式接口,其外部特征是类上使用@FunctionalInterface注解。它有以下特点:

    • 只能注解到有且仅有一个抽象方法的类上。
    • 接口显示声明或覆盖了java.lang.Object类中方法的方法也不算做抽象方法。
    • Java8接口中static方法与default方法不算抽象方法。

    他们各自的使用场景如下:

    • Function

    需要执行目标方法后得到返回值。

    接口修饰:

    @FunctionalInterface
    public interface Function<T, R>{}
    

    该类需要设置两个泛型,T为入参类型,R为返回值类型。

    主要方法:

        /**
         * Applies this function to the given argument.
         *
         * @param t the function argument
         * @return the function result
         */
        R apply(T t);
    
    • Consumer

    仅需要执行目标方法,不需要得到返回值。

    接口修饰:

    @FunctionalInterface
    public interface Consumer<T>{}
    

    该类需要设置一个泛型,T为参数类型。

    主要方法:

        /**
         * 对给定的参数执行此操作。
         *
         * @param t 入参
         */
        void accept(T t);
    
    • Predicate

    经过比较,得到比较逻辑执行过后的结果,其返回类型为true、false。

    接口修饰:

    @FunctionalInterface
    public interface Predicate<T>{}
    

    该类需要设置一个泛型,T为参数类型。

    主要方法:

        /**
         * 根据给定参数比较
         *
         * @param t 入参
         * @return {@code true} 满足条件返回true,
         * otherwise {@code false}
         */
        boolean test(T t);
    

    二、实例

    1、输入数字3,得到输入值加100的结果并转为字符创,并返回。

    # 定义函数执行方法
    Function<Integer, String> func = o -> {return String.valueOf((o + 100));};
    # 传入3,执行方法,获取返回结果
    String result = func.apply(3);
    System.out.println("result : " + result);
    

    结果:

    2、输入字符“hello”,拼接字符串“ word”并输出。

    Consumer<String> consumer = o -> {System.out.println(o + " world");};
    consumer.accept("hello");
    

    结果:

    3、输入字符串“hello”,判断长度是否等于5。

    Predicate<String> predicate = o -> {return o.length() == 5;};
    boolean test = predicate.test("hello");
    System.out.println("result : " + test);
    

    结果:

  • 相关阅读:
    终于想起了博客园密码
    关于GCD的8题
    idea快捷键 ctrl + shift + f 失效解决方法
    前端和后端日期类型交互
    poi、easypoi和easyexcel的使用
    事务总结
    数据库cte的理解和使用
    mybatis 调用存储过程没有返回值
    postgresql 查询锁表并解锁
    tigase网络核心SockThread详解(十九)
  • 原文地址:https://www.cnblogs.com/yl-space/p/13716897.html
Copyright © 2011-2022 走看看