java8学习- lambda表达式

阅读更多
  java 1.8支持了lambda表达式。它可以让我们的代码更简洁。看下面一个列出/目录下所有.txt文件的例子:
在java1.6,我们会写出这样的代码:
File f = new File("/");
String[] arr = f.list(new FilenameFilter() {
	
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(".txt");
	}
});

java 1.8支持了lambda表达式后,我们就可以这样写了:
File f = new File("/");
String[] arr = f.list((dir, name) -> name.endsWith(".txt"));

7行代码减到2行,是不是简洁了很多
我们来分析一下(dir, name) -> name.endsWith(".txt")这一段。
(dir,name)这里写的是输入参数。对应:accept(File dir, String name) 。因为编译器可以推荐出dir和name的类型,所以在这时不用再一次声明它的类型。
-> 是分隔符,表明后面跟的是具体的逻辑主体。这里只有一行代码,所以可以不用{}。如果有多行代码,可以这样写:
File f = new File("/");
String[] arr = f.list((dir, name) -> {
	System.out.println(name);
	//do something
	return name.endsWith(".txt");
});


同样的道理我们也可以写出下面这样的代码:
Thread t = new Thread(() -> {
	int a=123;
	System.out.println("test " + a);
});
t.start();


只要某个接口只有一个抽象方法,我们就可以用lambda表达式的方式来简化我们的代码。

参考文档:
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
http://www.iteye.com/magazines/129-Java-8-Tutorial

你可能感兴趣的:(java)