JDK8系列之Functional Interfaces教程和示例

举报
yd_273762914 发表于 2021/07/14 23:09:15 2021/07/14
【摘要】 JDK8系列之Functional Interfaces教程和示例 在前面章节的学习中,我们学习了JDK8的lambada表达式和方法引用,接着,本章节继续学习jdk8的一个重要特性Functional Interfaces,翻译过来就是函数式接口 1、什么是Functional Interfaces? 什么是函数式接口,Functional Interfaces...

JDK8系列之Functional Interfaces教程和示例

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

1、什么是Functional Interfaces?

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

package java.lang;
@FunctionalInterface
public interface Runnable { void run();
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

Runnable r = () -> System.out.println("hello world");

  
 
  • 1

等价于:

new Runnable() { @Override public void run() { System.out.println("hello world"); }
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2、@FunctionalInterface 注解

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

  • ①定义一个@FunctionalInterface
 @FunctionalInterface
 interface AddInterface { int addMethod(int a , int b);
 }

  
 
  • 1
  • 2
  • 3
  • 4
  • ② 调用FunctionalInterface
 // example 2 : FunctionalInterface自定义接口
 AddInterface addInterface = (a , b) -> a + b;
 System.out.println(String.format("两个数字相加:%s" , addInterface.addMethod(10,24)));


  
 
  • 1
  • 2
  • 3
  • 4

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里的函数式接口例子:


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


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

附录:参考资料

文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。

原文链接:smilenicky.blog.csdn.net/article/details/118728546

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。