Lambda基础语法:
一、Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符
箭头操作符将 Lambda 表达式拆分成两部分:
左侧:Lambda 表达式的参数列表
右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体
语法格式一:无参数,无返回值
() -> System.out.println("Hello Lambda!");
语法格式二:有一个参数,并且无返回值
(x) -> System.out.println(x)
语法格式三:若只有一个参数,小括号可以省略不写
x -> System.out.println(x)
语法格式四:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句
Comparator<Integer> com = (x, y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
语法格式五:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
(Integer x, Integer y) -> Integer.compare(x, y);
二、Lambda 表达式需要“函数式接口”的支持
函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解 @FunctionalInterface 修饰
可以检查是否是函数式接口
示例笔记一、比较普通方法与java8Lambda表示。
代码示例:
实体类:
package com.ywx;
public class Employee {
private String name;
private int age;
private double salary;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
'}';
}
public Employee(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
}
运行程序:
package com.ywx;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TestLambda {
public static final void main(String args[]) {
//普通方法实现
List<Employee> list = TestLambda.filterEmployee(employees);
System.out.println("普通方法实现:");
for(Employee emp : list){
System.out.println(emp);
}
//优化方式:Lambda表达式
System.out.println("Lamdba表达式实现:");
employees.stream().filter((e) -> e.getAge() > 33).forEach(System.out::println);
//将员工的名字输出
employees.stream()
.map(Employee::getName)
.forEach(System.out::println);
}
//需求:获取当前公司中员工年龄大于33岁的员工信息.
/**
* 普通方法实现.
*
* @param list
* @return
*/
public static List<Employee> filterEmployee(List<Employee> list) {
List<Employee> emps = new ArrayList<Employee>();
for (Employee emp : list) {
if (emp.getAge() > 33) {
emps.add(emp);
}
}
return emps;
}
public static List<Employee> employees = Arrays.asList(
new Employee("张三", 18, 999.99),
new Employee("李四", 36, 6666.66),
new Employee("王五", 76, 7777.77),
new Employee("赵六", 18, 5555.55),
new Employee("孙琦", 8, 33.33)
);
}
控制台打印信息:
普通方法实现:
Employee{name='李四', age=36, salary=6666.66}
Employee{name='王五', age=76, salary=7777.77}
Lamdba表达式实现:
Employee{name='李四', age=36, salary=6666.66}
Employee{name='王五', age=76, salary=7777.77}
张三
李四
王五
赵六
孙琦