Java函数式接口
【摘要】
一.初识函数式接口
只包含一个抽象方法的接口,称为函数式接口。你可以通过 Lambda 表达式来创建该接口的对象。若 Lambda 表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的...
一.初识函数式接口
- 只包含一个抽象方法的接口,称为函数式接口。
- 你可以通过 Lambda 表达式来创建该接口的对象。若 Lambda 表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明。
- 我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。
- 在java.util.function包下定义了Java 8 的丰富的函数式接口
二.Java内置四大核心函数式接口
函数式接口 | 参数类型 | 返回类型 | 用途 |
---|---|---|---|
Consumer <T> 消费型接口 | T | void | 对类型为T的对象应用操作,包含方法:void accept(T t) |
Supplier <T> 供给型接口 | 无 | T | 返回类型为T的对象,包含方法:T get() |
Function<T,R> 函数型接口 | T | R | 对类型为T的对象应用操作,并返回结果。结 果是R类型的对象。包含方法:R apply(T t) |
Predicate<T> 断定型接口 | T | boolean | 确定类型为T的对象是否满足某约束,并返回 boolean 值。包含方法:boolean test(T t) |
举例:
代码示例一:
@Test
public void test1(){
//原始写法
Consumer<Integer> consumer = new Consumer<>() {
@Override
public void accept(Integer i) {
System.out.println("买物品需:" + i + "元");
}
};
buySomething(999,consumer);
//匿名实现类的匿名对象写法
buySomething(555,new Consumer<Integer>(){
@Override
public void accept(Integer integer) {
System.out.println("买球鞋需:" + integer + "元");
}
});
//Lambda表达式写法
buySomething(666,i -> System.out.println("买乳清蛋白粉需:" + i + "元"));
}
public void buySomething(int money, Consumer<Integer> consumer){
consumer.accept(money);
}
- 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
输出结果:
买物品需:999元
买球鞋需:555元
买乳清蛋白粉需:666元
Process finished with exit code 0
- 1
- 2
- 3
- 4
- 5
- 6
代码示例二:
@Test
public void test2(){
List<Integer> list = Arrays.asList(123,456,789,555,999,2,333,6,88,99,77,66,33,233,888,111);
List<Integer> getList = meetTheConditions(list,i -> i <= 333);
System.out.println(getList);
}
public List<Integer> meetTheConditions(List<Integer> list,Predicate<Integer> predicate){
ArrayList<Integer> arrayList = new ArrayList<>();
for (Integer i : list) {
if(predicate.test(i)){
arrayList.add(i);
}
}
return arrayList;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
输出结果:
[123, 2, 333, 6, 88, 99, 77, 66, 33, 233, 111]
Process finished with exit code 0
- 1
- 2
- 3
- 4
三.其他接口
函数式接口 | 参数类型 | 返回类型 | 用途 |
---|---|---|---|
BiFunction<T, U, R> | T, U | R | 对类型为 T, U 参数应用操作,返回 R 类型的结 果。包含方法为: R apply(T t, U u); |
UnaryOperator<T> (Function子接口) | T | T | 对类型为T的对象进行一元运算,并返回T类型的 结果。包含方法为:T apply(T t); |
BinaryOperator<T> (BiFunction 子接口) | T, U | void | 对类型为T, U 参数应用操作。 包含方法为: void accept(T t, U u) |
BiConsumer<T, U> | T, U | void | 对类型为T, U 参数应用操作。 包含方法为: void accept(T t, U u) |
BiPredicate<T,U> | T,U | boolean | 包含方法为: boolean test(T t,U u) |
ToIntFunction<T> ToLongFunction<T> ToDoubleFunction<T> | T | int long double | 分别计算int、long、double值的函数 |
IntFunction<R> LongFunction<R> DoubleFunction<R> | int long double | R | 参数分别为int、long、double 类型的函数 |
文章来源: blog.csdn.net,作者:Mr.Yushiwen,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/MrYushiwen/article/details/111146205
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)