美文网首页
函数式接口

函数式接口

作者: CC晨_程序小生 | 来源:发表于2018-12-19 10:22 被阅读0次

函数式接口

函数式接口通过一个单一的功能来表现。例如,带有单个compareTo方法的比较接口,被用于比较的场合。Java 8 定义了大量的函数式接口来广泛地用于lambda表达式。

Java 8 引入的一个核心概念是函数式接口(Functional Interfaces)。通过在接口里面添加一个抽象方法,这些方法可以直接从接口中运行。如果一个接口定义唯一一个抽象方法,那么这个接口就成为函数式接口。同时,引入了一个新的注解:@FunctionalInterface。可以把他它放在一个接口前,表示这个接口是一个函数式接口。这个注解是非必须的,只要接口只包含一个方法的接口,虚拟机会自动判断,不过最好在接口上使用注解 @FunctionalInterface 进行声明。在接口中添加了 @FunctionalInterface 的接口,只允许有一个抽象方法,否则编译器也会报错。
部分函数式接口列表

  • BitConsumer<T,U>:该接口代表了接受两个输入参数T、U,并且没有返回的操作。
  • BiFunction<T,U,R>:该接口代表提供接受两个参数T、U,并且产生一个结果R的方法
  • BinaryOperator:代表了基于两个相同类型的操作数,产生仍然是相同类型结果的操作
  • BiPredicate<T,U>:代表两个参数的断言操作(基于Boolean值的方法)
  • BooleanSupplier:代表了一个给出Boolean值结果的方法
  • Consumer:代表了接受单一输入参数并且没有返回值的操作
  • DoubleBinaryOperator:代表了基于两个Double类型操作数的操作,并且返回一个Double类型的返回值
  • DpubleConsumer:代表了一个接受单个Double类型的参数并且没有返回的操作
  • DoubleFunction:代表了一个接受Double类型的参数并且返回结果的方法
  • DoublePredicate:代表了对一个Double类型的参数的断言操作
  • DoubleSupplier:代表了一个给出Double类型值的方法
  • DoubleToIntFunction:代表了接受单个Double类型参数但返回Int类型结果的方法
  • DoubleToLongFunction:代表了接受单个Double类型参数但返回Long类型结果的方法
  • DoubleUnaryOperator:代表了基于单个Double类型操作数且产生Double类型结果的操作
  • Function<T,R>:代表了接受一个参数并且产生一个结果的方法
  • IntBinaryOperator:代表了对两个Int类型操作数的操作,并且产生一个Int类型的结果
  • IntConsumer:代表了接受单个Int类型参数的操作,没有返回结果
  • IntFunction:代表了接受Int类型参数并且给出返回值的方法
  • IntPredicate:代表了对单个Int类型参数的断言操作

更多的接口可以参考Java 8官方API手册:java.lang.Annotation Type FunctionalInterface。在实际使用过程中,加有@FunctionalInterface注解的方法均是此类接口,位于java.util.Funtion包中

一个例子

源代码:函数式编程

public class NewFeaturesTester {
    public static void main(String args[]){
        List<Integer> list = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

        System.out.println("All of the numbers:");

        eval(list, n->true);

        System.out.println("Even numbers:");
        eval(list, n-> n%2 == 0 );

        System.out.println("Numbers that greater than  5:");
        eval(list, n -> n > 5 );
    }

    public static void eval(List<Integer> list, Predicate<Integer> predicate) {
        for(Integer n: list) {
            if(predicate.test(n)) {
                System.out.println(n);
            }
        }
    }
}

输出结果:

All of the numbers:
0
1
2
3
4
5
6
7
8
9
Even numbers:
0
2
4
6
8
Numbers that greater than  5:
6
7
8
9

相关文章

  • java基础-day23-函数式接口和Stream流

    函数式接口和Stream 1. 函数式接口 1.1 函数式接口概述 1.2 常用函数式接口 1.3 比较器函数式接...

  • 2020-07-04【函数式接口】

    函数式接口概述 函数式接口作为方法的参数 函数式接口作为方法的返回值 常见的函数式接口 Supplier接口 Co...

  • 12.函数式接口

    主要内容 自定义函数式接口 函数式编程 常用函数式接口 第一章 函数式接口 1.1 概念 函数式接口在Java中是...

  • 函数式接口

    函数式接口 一、函数式接口的定义   函数式接口:函数式接口中有且仅有一个抽象方法,这个抽象方法的意义在于表达某种...

  • 测验:函数式接口

    下面哪些接口是函数式接口? 答案:只有Adder是函数式接口。SmartAdder不是函数式接口,因为它定义了两个...

  • Java8系列:神奇的函数式接口

    01 函数式接口是什么? 有且只有一个抽象方法的接口被称为函数式接口,函数式接口适用于函数式编程的场景,Lambd...

  • 函数式接口和Lambda表达式深入理解

    0x00 函数式接口 前面讲了一下函数式接口,不过可能只是讲了个大概,大致讲了一下什么是函数式接口 函数式接口就是...

  • java8函数式接口

    一、函数式接口 1、函数式接口在java中是指:有且仅有一个抽象方法的接口,函数式接口,即适用于函数式编程场景的接...

  • Java 8 知多少

    一、函数式接口 函数式接口的定义: 函数式接口(Functional Interface)就是一个有且仅有一个抽象...

  • Java lambda表达式

    1. Java函数式接口 Java实现函数式编程的方式是函数式接口(functional interface),函...

网友评论

      本文标题:函数式接口

      本文链接:https://www.haomeiwen.com/subject/ovmdkqtx.html