四大函数式接口

函数式接口是什么?


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

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

Function

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

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

lambda表达式简化

Predicate 传入泛型返回boolean类型

断定形接口

消费者接口

只有输入没有返回值

供给形接口

没有参数只有返回值

返回值类型为泛型。

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

@FunctionalInterface
public interface Consumer<T> {
 
    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);
}

例子:

package com.example.demo.java8;

import java.util.function.Consumer;

public class Java8InnerFunction {

    public static void main(String[] args) {
        Java8InnerFunction function=new Java8InnerFunction();
        function.consumMoney(1000,x-> System.out.println("消费了:"+x+"元"));
    }

    public void consumMoney(int money, Consumer consumer){
        consumer.accept(money);
    }
}

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

@FunctionalInterface
public interface Supplier<T> {

   /**
    * Gets a result.
    *
    * @return a result
    */
   T get();
}

例子:

 public static void main(String[] args) {
        Java8InnerFunction function=new Java8InnerFunction();
        int i = function.supplyRandomNum(() -> 
             (int) (Math.random() * 100);
        );
        System.out.println("获得的随机数是:"+i);
    }

    public int supplyRandomNum(Supplier<Integer> supplier){
        return supplier.get();
    }

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

@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);
}

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

package com.example.demo.java8;

import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

public class Java8InnerFunction {

    public static void main(String[] args) {
        Java8InnerFunction function=new Java8InnerFunction();
     
        int i1 = function.functionCompute(5, x -> x * 10);
        System.out.println("计算后的结果值是:"+i1);
    }

    public int functionCompute(int a,Function<Integer,Integer> function){
        return function.apply(a);
    }
}

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

@FunctionalInterface
public interface Predicate<T> {
 
    /**
     * Evaluates this predicate on the given argument.
     *
     * @param t the input argument
     * @return {@code true} if the input argument matches the predicate,
     * otherwise {@code false}
     */
    boolean test(T t);
}

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

 public static void main(String[] args) {
        Java8InnerFunction function=new Java8InnerFunction();
       
        boolean b = function.predicateCompare(101, x -> x > 100);
        System.out.println("101比100大吗:"+b);
    }

   
    public boolean predicateCompare(int x,Predicate<Integer> predicate){
      return  predicate.filter(x);

    }
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LeeGaKi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值