千锋武汉Java培训分享:Lambda表达式之函数式接口
函数式接口(Functional Interface) :任何接口,如果只包含唯一 一个抽象方法,那么它就是一个FI。(之前它们被称为 SAM类型,即 单抽象方法类型(Single Abstract Method))。接口中的方法默认就是public abstract的。
接口可能继承了一个 Object 已经提供的方法,比如 toString(),equals( )…这些都不属于函数式接口方法的范畴, 所以函数式接口中所说的方法不包括这些。
可以通过 @FunctionalInterface 注解来显式指定一个接口是函数式接口。加上这个注解,接口中函数式接口方法少于一个或者多余一个,编译器都会提示错误。
其实我们之前写的接口实例化就是函数式接口的实例化。
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为lambda表达式。
函数式接口可以现有的函数友好地支持 lambda。
JDK 1.8之前已有的函数式接口:
java.lang.Runnable
java.util.concurrent.Callable
java.security.PrivilegedAction
java.util.Comparator
java.io.FileFilter
java.nio.file.PathMatcher
java.lang.reflect.InvocationHandler
java.beans.PropertyChangeListener
java.awt.event.ActionListener
JDK 1.8 新增加的函数接口:
java.util.function
java.util.function 它包含了很多类,用来支持 Java的 函数式编程,该包中的函数式接口有:
//Predicate接口 代码示例:
@Test
public void test7(){
List list = Arrays.asList(11, 22, 33, 14, 15, 66, 7, 18, 19);
//Predicate接口 常用test方法 存在则 test 方法返回 true
Predicate predicate=n->n%2==1;
for(Integer i:list) {
if(predicate.test(i)){
System.out.println("奇数:"+i);
}
}
}
private int getSum(int n1, int n2, BiFunction biFunction){
return biFunction.apply(n1,n2);
}
//BiFunction 接受两个参数 返回一个结果
@Test
public void test8(){
System.out.println("求余数:"+getSum(13,3,(n1,n2)->n1%n2));
}
千锋武汉Java培训机构配以高品质的面授和大量实战项目训练,还在毕业前夕为学员安排模拟面试环节,让学员在真正的面试过程中可以充分的发挥自身的优势,成为一名Java开发工程师。现在咨询报名还能免费试听两周,亲身实地感受授课质量,了解学员的学习情况。
热搜文章HOT
人气阅读排行榜
千锋武汉Python培训推荐:6本适合Python小白学习的书!
千锋武汉Python培训分享:10个免费的Python学习网站
千锋武汉Java培训推荐:5本Java构架师必读的书!
开班信息
北京校区
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
- 南昌校区
- 哈尔滨校区
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
- 南昌校区
- 哈尔滨校区