写在前面, 学习之后的笔记作为复习总结之用,建议参考本文最后的oracle的教程,并进行实践.
lamda表达式是java 8添加的新特性,
- 可以给给collection的foreach,map,filter等方法提供方便支持.
- 可以配合functional interface(只有一个方法的接口) 使用, java.util.function提供了一些这样的接口
- 替换匿名内部类(这些匿名内部类,其实也是函数是接口的类实现)
- lamada表达式传参,使得很多方法更灵活,代码可以复用,避免boilerplate code
lamada表达式的语法如下
(int x, int y) -> x +y
Argument list 参数列表 arrow token 箭头 statement block or expression 语句块或者表达式
一个参数的时候,可以不写括号,可以不写类型.
例如下:
package test
import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;
public class TestLamada {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("longstring");
list.add("secondString");
list.add("lol");
// print each member
list.forEach((String s) -> System.out.println("member:" + s));
// print member whose length longer than 4;
List<String> list2 = list
.stream()
.filter( p -> p.length() > 4)
.collect(Collectors.toList());
list2.forEach( s -> System.out.println("length:" + s.length())
);
}
}
参考
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html