JDK8系列之Functional Interfaces教程和示例
【摘要】 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)