lamda的语法:
- 以逗号分隔,以()关闭的形参:
(o1, o2)
- 箭头标记:
->
- 主体部分则是一个单表达式或者声明代码块。如下是单表达式形式:
Integer.compare(m.getWeight(), n.getWeight())
大致就是(参数x1,x2.....xn)--> { 代码块 }
使用场景1:用lambda表达式实现Runnable
//java1.8之前 new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8, too much code for too little to do"); } }).start();
//java 1.8之后
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
使用场景2: lambda表达式进行事件处理
JButton show = new JButton("Show");
show.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Event handling without lambda expression is boring");
}
});// Java 8方式:
show.addActionListener((e) -> {
System.out.println("Light, Camera, Action !! Lambda expressions Rocks");
});
使用场景3:forEach 的使用
List<Person> personList = new ArrayList<>(); personList.add(new Person("yang","cai")); personList.add(new Person("yang","fen")); personList.add(new Person("yang","feng")); //java 1.8之前 for(Person p : personList){ System.out.println(p.getFirstName() } //java 1.8 personList.forEach(x->System.out.println(x.getFirstName()));
使用场景4:Supplier,Predicate,Comparator,Function,Consumer等接口的使用,见java函数式编程之五个基本接口
使用场景5:在Java stream中的使用,其实也是场景4的使用,下一节讲 java stream学习讲到