黑马程序员技术交流社区
标题: 【石家庄校区】day12-笔记 [打印本页]
作者: dyynrahbsqt 时间: 2018-12-2 16:55
标题: 【石家庄校区】day12-笔记
函数式接口函数式接口概念, 自定义函数式接口
函数式接口: JDK 8 新特性
有且仅有一个抽象方法的接口, 适用于函数式编程场景的接口
(默认方法, 静态方法, 私有方法, 与java.lang.Object类中定义相同的抽象方法, 都不算作抽象方法)
自定义函数式接口:
接口中有且只有一个抽象方法
@FunctionalInterface的作用:
在接口上使用, 检测当前的接口是否为函数式接口
Lambda具有延迟执行的特点:
传递Lambda对象, 只有当符合执行条件时, 才会执行代码
使用Lambda表达式作为方法参数
当一个方法的参数是一个函数式接口时, 可以使用Lambda表达式传递该参数, 简化匿名内部类的代码:
public class Test {
public static void main(String[] args) {
// 匿名内部类方式
startThread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "-->线程启动了");
}
});
// Lambda表达式方式: 标准格式
startThread(()->{
System.out.println(Thread.currentThread().getName() + "-->线程启动了");
});
// Lambda表达式方式: 省略格式
startThread(()->System.out.println(Thread.currentThread().getName() + "-->线程启动了"));
}
public static void startThread(Runnable r) {
new Thread(r).start();
}
}
使用Lambda表达式作为方法返回值
当一个方法的返回值是一个函数式接口时, 可以返回Lambda表达式, 简化匿名内部类的代码:public class Test {
// 返回一个按照字符串长度降序的比较器对象
private static Comparator<String> getComparator() {
// 匿名内部类方式
/*return new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.length() - o1.length();
}
};*/
// Lambda表达式: 标准格式
/*return (String o1, String o2)->{
return o2.length() - o1.length();
};*/
// Lambda表达式: 省略格式
return (o1, o2)->o2.length() - o1.length();
}
public static void main(String[] args) {
String[] arr = {"aaa", "b", "cccccc", "ddddddddddd"};
System.out.println("排序前:" + Arrays.toString(arr)); // 排序前:[aaa, b, cccccc, ddddddddddd]
Arrays.sort(arr, getComparator());
System.out.println("排序后:" + Arrays.toString(arr)); // 排序后:[ddddddddddd, cccccc, aaa, b]
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |