菜鸟教程Java Lambda地址链接
JDK8之后,java支持了lambda表达式这个特性.
- lambda可以用更精简的代码创建匿名内部类.但是该匿名内部类实现的接口只能有一个抽象方法,否则无法使用!
- lambda表达式是编译器认可的,最终会将其改为内部类编译到class文件中
import java.io.File;
import java.io.FileFilter;
/**
* lambda表达式 JDK8之后推出的新特性
*
* lambda可以让程序员面向函数式编程
* 让我们用更精简的语法创建匿名内部类
* 语法:
* (参数列表)->{
* 方法体
* }
* 当我们使用匿名内部类创建一个对象时,如果实现的接口中【只有一个抽象方法】时,该操作就可以使用lambda
* 表达式做替换。是的代码更简洁,优雅。
*
*/
public class LambdaDemo {
public static void main(String[] args) {
//匿名内部类写法创建一个文件过滤器
FileFilter filter1 = new FileFilter() {
public boolean accept(File f) {
return f.length()>500;
}
};
//lambda表达式写法:去掉接口和方法名部分,在参数列表和方法体大括号之间加上"->"就是lambda
FileFilter filter2 = (File f)->{
return f.length()>500;
};
//lambda表达式中,可以忽略方法参数类型(仅写参数名即可)
FileFilter filter3 = (f)->{
return f.length()>500;
};
//如果该方法的参数只有【一个】的时候,参数列表的"()"可以忽略不写
FileFilter filter4 = f->{
return f.length()>500;
};
//如果方法体中只有一句代码,那么方法体的"{}"可以忽略不写
//注:如果有return关键字,那么在忽略"{}"的同时"return"关键字也必须一同忽略。
FileFilter filter5 = f->f.length()>500;
//原来匿名内部类在File当中的应用
File dir = new File("./src/file");
if(dir.isDirectory()){
//匿名内部类形式
// File[] subs = dir.listFiles(new FileFilter() {
// public boolean accept(File file) {
// return file.length()>1000;
// }
// });
File[] subs = dir.listFiles(f->f.length()>1000);
for(int i=0;i<subs.length;i++){
System.out.println(subs[i].getName()+":"+subs[i].length());
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/91097.html