jdk1.8新增了许多新特性,其中lambda和Stream API的引入使我们的代码简洁和优雅,下面举2个简单的入门例子和jdk1.7以前做对比;
比较2个值的大小
jdk1.7以前的写法:
public void test01(){
Comparator<Integer> com = new Comparator<Integer>() {
@Override
public int compare(Integer x, Integer y) {
return Integer.compare(x,y);
}
};
}
Lambda表达式写法
public void test02(){
Comparator<Integer> com = (x,y)->Integer.compare(x,y);
//更简洁的写法
//Comparator<Integer> com = Integer::compare;
}
查找工资大于 5000 的员工信息
员工列表:伪数据
List<Employee> emps = Arrays.asList(
new Employee(101, "张三", 18, 12000),
new Employee(102, "李四", 59, 10000),
new Employee(103, "王五", 28, 9000),
new Employee(104, "赵六", 8, 4500),
new Employee(105, "田七", 38, 6000)
);
jdk1.7以前的写法:
public List<Employee> filterEmployeeBySalary(List<Employee> emps){
List<Employee> list = new ArrayList<>();
for (Employee emp : emps) {
if(emp.getSalary() > 5000){
list.add(emp);
}
}
return list;
}
Lambda 表达式写法
public List<Employee> selectEmployeeBySalary2(List<Employee> emps){
List<Employee> list = emps.stream()
.filter(e -> e.getSalary() > 5000)
.collect(Collectors.toList());
return list;
}
查找工资大于8000且年龄大于等于35岁的员工信息,只找出前2条并打印
public void test04(){
emps.stream()
.filter((e) -> ( e.getAge()>=35 && e.getSalary()>=8000))
.limit(2)
.forEach(System.out::println);
}