前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDK8系列之Functional Interfaces教程和示例

JDK8系列之Functional Interfaces教程和示例

作者头像
SmileNicky
发布2021-07-16 11:13:50
3710
发布2021-07-16 11:13:50
举报
文章被收录于专栏:Nicky's blogNicky's blog

JDK8系列之Functional Interfaces教程和示例

前面章节的学习中,我们学习了JDK8的lambada表达式和方法引用,接着,本章节继续学习jdk8的一个重要特性Functional Interfaces,翻译过来就是函数式接口

1、什么是Functional Interfaces?

什么是函数式接口,Functional Interfaces?函数式接口是jdk8的新特性之一,函数式接口是只包含一个抽象方法声明的接口。比如java.lang.Runnable就是一种函数式接口,在 Runnable 接口中只声明了一个方法 void run()

代码语言:javascript
复制
package java.lang;
@FunctionalInterface
public interface Runnable {
    void run();
}

Lambda 表达式、构造函数、方法引用都能隐式地赋值给函数式接口

使用lambada表达式赋值给Runnable函数式接口

代码语言:javascript
复制
Runnable r = () -> System.out.println("hello world");

等价于:

代码语言:javascript
复制
new Runnable() {
    @Override
    public void run() {
        System.out.println("hello world");
    }
};

2、@FunctionalInterface 注解

使用@FunctionalInterface注解用于自定义一个函数式接口,下面给出一个例子:

  • ①定义一个@FunctionalInterface
代码语言:javascript
复制
 @FunctionalInterface
 interface AddInterface {
     int addMethod(int a , int b);
 }
  • ② 调用FunctionalInterface
代码语言:javascript
复制
 // example 2 : FunctionalInterface自定义接口
 AddInterface addInterface = (a , b) -> a + b;
 System.out.println(String.format("两个数字相加:%s" , addInterface.addMethod(10,24)));

3、使用java.util.function的函数式接口

java.util.function提供了很多的函数式接口,可以称之为 predefined functional interface

序号

函数式接口

描述说明

1

BiConsumer<T,U>

代表了一个接受两个输入参数的操作,并且不返回任何结果

2

BiFunction<T,U,R>

代表了一个接受两个输入参数的方法,并且返回一个结果

3

BinaryOperator<T>

代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果

4

BiPredicate<T,U>

代表了一个两个参数的boolean值方法

5

BooleanSupplier

代表了boolean值结果的提供方

6

Consumer<T>

代表了接受一个输入参数并且无返回的操作

7

DoubleBinaryOperator

代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。

8

DoubleConsumer

代表一个接受double值参数的操作,并且不返回结果。

9

DoubleFunction<R>

代表接受一个double值参数的方法,并且返回结果

10

DoublePredicate

代表一个拥有double值参数的boolean值方法

11

DoubleSupplier

代表一个double值结构的提供方

12

DoubleToIntFunction

接受一个double类型输入,返回一个int类型结果。

13

DoubleToLongFunction

接受一个double类型输入,返回一个long类型结果

14

DoubleUnaryOperator

接受一个参数同为类型double,返回值类型也为double 。

15

Function<T,R>

接受一个输入参数,返回一个结果。

16

IntBinaryOperator

接受两个参数同为类型int,返回值类型也为int 。

17

IntConsumer

接受一个int类型的输入参数,无返回值 。

18

IntFunction<R>

接受一个int类型输入参数,返回一个结果 。

19

IntPredicate

:接受一个int输入参数,返回一个布尔值的结果。

20

IntSupplier

无参数,返回一个int类型结果。

21

IntToDoubleFunction

接受一个int类型输入,返回一个double类型结果 。

22

IntToLongFunction

接受一个int类型输入,返回一个long类型结果。

23

IntUnaryOperator

接受一个参数同为类型int,返回值类型也为int 。

24

LongBinaryOperator

接受两个参数同为类型long,返回值类型也为long。

25

LongConsumer

接受一个long类型的输入参数,无返回值。

26

LongFunction<R>

接受一个long类型输入参数,返回一个结果。

27

LongPredicate

R接受一个long输入参数,返回一个布尔值类型结果。

28

LongSupplier

无参数,返回一个结果long类型的值。

29

LongToDoubleFunction

接受一个long类型输入,返回一个double类型结果。

30

LongToIntFunction

接受一个long类型输入,返回一个int类型结果。

31

LongUnaryOperator

接受一个参数同为类型long,返回值类型也为long。

32

ObjDoubleConsumer<T>

接受一个object类型和一个double类型的输入参数,无返回值。

33

ObjIntConsumer<T>

接受一个object类型和一个int类型的输入参数,无返回值。

34

ObjLongConsumer<T>

接受一个object类型和一个long类型的输入参数,无返回值。

35

Predicate<T>

接受一个输入参数,返回一个布尔值结果。

36

Supplier<T>

无参数,返回一个结果

37

ToDoubleBiFunction<T,U>

接受两个输入参数,返回一个double类型结果

38

ToDoubleFunction<T>

接受一个输入参数,返回一个double类型结果

39

ToIntBiFunction<T,U>

接受两个输入参数,返回一个int类型结果

40

ToIntFunction<T>

接受一个输入参数,返回一个int类型结果。

41

ToLongBiFunction<T,U>

接受两个输入参数,返回一个long类型结果。

42

ToLongFunction<T>

接受一个输入参数,返回一个long类型结果

43

UnaryOperator<T>

接受一个参数为类型T,返回值类型也为T。

java.util.function里的函数式接口例子:

代码语言:javascript
复制
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class FunctionalInterfacesExample {

    public static void main(String[] args) {
        // example : java.util.function函数接口应用
        // Consumer接口接收一个参数,不返回参数
        consumerFun(1 , v -> {System.out.println(v);});
        // binConsumer 接收两个参数,返回0个参数
        binConsumerFun("hello", "world" , (a ,b) -> {
            System.out.println(a + b);
        });
        // Predicate 接收一个参数,返回一个boolean值
        System.out.println(predicateFun(3 , a -> a ==3));
        // Predicate 接收0个参数,返回一个值
        System.out.println(supplierFun(() -> 1));
    }

    public static void consumerFun(int value, Consumer<Integer> c) {
        c.accept(value);
    }

    public static void binConsumerFun(String a , String b, BiConsumer<String , String> binc) {
        binc.accept(a , b);
    }

    public static boolean predicateFun(int value, Predicate<Integer> pre) {
        return pre.test(value);
    }

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

   
}

附录:参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JDK8系列之Functional Interfaces教程和示例
    • 1、什么是Functional Interfaces?
      • 2、@FunctionalInterface 注解
        • 3、使用java.util.function的函数式接口
          • 附录:参考资料
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档