• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

四大函数式接口

武飞扬头像
LeeGaKi
帮助1

函数式接口是什么?


如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口
函数式接口的实例可以通过 lambda 表达式、方法引用或者构造方法引用来创建。
如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口
如果某个接口只有一个抽象方法,但我们并没有给该接口声明 @FunctionalInterface 注解,那么编译器依旧会将该接口看作是函数式接口

1:四大函数式接口:Consumer、Supplier、Function、Predicate
学新通

Function

开源码知道传入参数和返回类型 传入什么返回什么。

用匿名内部类new出函数式接口实现

学新通

lambda表达式简化

学新通

Predicate 传入泛型返回boolean类型

断定形接口

学新通

学新通

消费者接口

只有输入没有返回值

学新通

供给形接口

没有参数只有返回值

返回值类型为泛型。

学新通

1、consumer<T> 消费型接口,有入参,返回值为空

  1.  
    @FunctionalInterface
  2.  
    public interface Consumer<T> {
  3.  
     
  4.  
    /**
  5.  
    * Performs this operation on the given argument.
  6.  
    *
  7.  
    * @param t the input argument
  8.  
    */
  9.  
    void accept(T t);
  10.  
    }

例子:

  1.  
    package com.example.demo.java8;
  2.  
     
  3.  
    import java.util.function.Consumer;
  4.  
     
  5.  
    public class Java8InnerFunction {
  6.  
     
  7.  
    public static void main(String[] args) {
  8.  
    Java8InnerFunction function=new Java8InnerFunction();
  9.  
    function.consumMoney(1000,x-> System.out.println("消费了:" x "元"));
  10.  
    }
  11.  
     
  12.  
    public void consumMoney(int money, Consumer consumer){
  13.  
    consumer.accept(money);
  14.  
    }
  15.  
    }
学新通

2、Supplier<T> 提供型接口 空参但是有返回值

  1.  
    @FunctionalInterface
  2.  
    public interface Supplier<T> {
  3.  
     
  4.  
    /**
  5.  
    * Gets a result.
  6.  
    *
  7.  
    * @return a result
  8.  
    */
  9.  
    T get();
  10.  
    }

例子:

  1.  
    public static void main(String[] args) {
  2.  
    Java8InnerFunction function=new Java8InnerFunction();
  3.  
    int i = function.supplyRandomNum(() ->
  4.  
    (int) (Math.random() * 100);
  5.  
    );
  6.  
    System.out.println("获得的随机数是:" i);
  7.  
    }
  8.  
     
  9.  
    public int supplyRandomNum(Supplier<Integer> supplier){
  10.  
    return supplier.get();
  11.  
    }

3、Function<T, R> 函数型接口 有入参 有返回值

  1.  
    @FunctionalInterface
  2.  
    public interface Function<T, R> {
  3.  
     
  4.  
    /**
  5.  
    * Applies this function to the given argument.
  6.  
    *
  7.  
    * @param t the function argument
  8.  
    * @return the function result
  9.  
    */
  10.  
    R apply(T t);
  11.  
    }

 例子:计算一个数的10倍,并输出结果

  1.  
    package com.example.demo.java8;
  2.  
     
  3.  
    import java.util.Random;
  4.  
    import java.util.function.Consumer;
  5.  
    import java.util.function.Function;
  6.  
    import java.util.function.Supplier;
  7.  
     
  8.  
    public class Java8InnerFunction {
  9.  
     
  10.  
    public static void main(String[] args) {
  11.  
    Java8InnerFunction function=new Java8InnerFunction();
  12.  
     
  13.  
    int i1 = function.functionCompute(5, x -> x * 10);
  14.  
    System.out.println("计算后的结果值是:" i1);
  15.  
    }
  16.  
     
  17.  
    public int functionCompute(int a,Function<Integer,Integer> function){
  18.  
    return function.apply(a);
  19.  
    }
  20.  
    }
学新通

4、Predicat<T> 断言型接口 返回真假

  1.  
    @FunctionalInterface
  2.  
    public interface Predicate<T> {
  3.  
     
  4.  
    /**
  5.  
    * Evaluates this predicate on the given argument.
  6.  
    *
  7.  
    * @param t the input argument
  8.  
    * @return {@code true} if the input argument matches the predicate,
  9.  
    * otherwise {@code false}
  10.  
    */
  11.  
    boolean test(T t);
  12.  
    }

 例子:计算一个数是否比100大,并输出真假

  1.  
    public static void main(String[] args) {
  2.  
    Java8InnerFunction function=new Java8InnerFunction();
  3.  
     
  4.  
    boolean b = function.predicateCompare(101, x -> x > 100);
  5.  
    System.out.println("101比100大吗:" b);
  6.  
    }
  7.  
     
  8.  
     
  9.  
    public boolean predicateCompare(int x,Predicate<Integer> predicate){
  10.  
    return predicate.filter(x);
  11.  
     
  12.  
    }

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghegie
系列文章
更多 icon
同类精品
更多 icon
继续加载