一、为什么使用lambda
Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
package com.duchong.java8; /** * @author DUCHONG * @since 2019-01-02 15:00 **/ public class LambdaTest2 { public static void main(String[] args) { //原写法 new Thread(new Runnable() { @Override public void run() { System.out.println("run ----hello lambda"); } }).start(); //lambda表达式写法 new Thread(()-> System.out.println("run2 ----hello lambda")).start(); } }
二、lambda语法
Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 "->", 该操作符被称为 Lambda 操作符或剪头操作符。它将 Lambda 分为两个部分:
- 左侧:指定了 Lambda 表达式需要的所有参数
- 右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。
三、引用
3.1、方法引用
3.2、构造器引用
3.3、数组引用
四、stream API简单使用
包名:java.util.stream .*
需求:查询出集合中薪水大于5000 的员工。
Employee.java
package com.duchong.java8; public class Employee { private String name; private int age; private char gender; private double salary; public Employee() { } public Employee(String name, int age, char gender, double salary) { this.name = name; this.age = age; this.gender = gender; this.salary = 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 char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } @Override public String toString() { return "Employee [name=" + name + ", age=" + age + ", gender=" + gender + ", salary=" + salary + "]"; } }
main
package com.duchong.java8; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * @author DUCHONG * @since 2019-01-02 15:00 **/ public class LambdaTest2 { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("duchong", 18, '男', 0), new Employee("duchong", 17, '男', 0), new Employee("duchong1", 20, '女', 5000), new Employee("duchong2", 18, '女', 8000), new Employee("duchong3", 22, '男', 9000), new Employee("duchong4", 30, '男', 11000) ); //过滤大于5000 employees.stream() .filter((e) -> e.getSalary() >= 5000) .forEach(System.out::println); System.out.println("---------------------------------------"); //获取名称 不去重 employees.stream() .map(Employee::getName) .forEach(System.out::println); //获取名称 去重 System.out.println("---------------------------------------"); employees.stream() .map(Employee::getName) .distinct() .forEach(System.out::println); //获取唯一性的Name列表 List<String> employeeList=employees.stream() .map(Employee::getName) .distinct() .collect(Collectors.toList()); } }
结果: