Java 8的新特性之Lambda表达式
jdk1.8 自从其发布以来一直都是 Java 开发的一个主要版本,其新增了非常多的特性,支持函数式编程
而 Lambda 表达式则是 jdk1.8 的一个核心之一
1. Lambda表达式简介
Lambda 表达式是一个匿名函数,可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更加简洁、灵活的代码。作为一种更为紧凑的代码风格,使 Java 语言表达能力得到提升
语法糖:指使用更加f方便,但是原理不变的代码语法。例如在遍历集合时使用的 for-each 语法,其底层的实现原理仍然是迭代器。从应用层面上讲,Java 中d的 Lambda 表达式可以被当作匿名内部类的语法糖,但是二者在原理上是不同的。
以下是 Lambda 表达式的重要特征
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值
语法对比
匿名内部类demo
//原来的匿名内部类
Comparator<Integer> com = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return Integer.compare(o1, o2);
}
};
TreeSet<Integer> ts = new TreeSet<>(com);
使用 lambda 表达式改写
Comparator<Integer> com = (x,y) -> Integer.compare(x, y);
TreeSet<Integer> ts = new TreeSet<>(com);
2. Lambda优化场景
需求,按按条件查询数据
如:获取学生中年龄大于 20 的信息
创建实体类Student
package com.jiker.bean;
public class Student {
private Integer id;
private String sName;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getsName() {
return sName;
}
public void setsName(String sName) {
this.sName = sName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", sName=" +