Lambda和Stream

一、Lambda

  1. 以前遍历
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void main(String[] args) {
List<Employee> list = Arrays.asList(
new Employee("san",18,2500),
new Employee("er",38,3500),
new Employee("yi",58,6800),
new Employee("zero",99,1230)
);
LambdaDemo1 lambdaDemo1 = new LambdaDemo1();
List<Employee> employee = lambdaDemo1.findEmployee(list);
for (Employee employee1 : employee) {
System.out.println(employee1.toString());
}

}
public List<Employee> findEmployee(List<Employee> list) {
List<Employee> list1 = new ArrayList<>();
for (Employee employee : list) {
if (employee.getAge() >= 57)
list1.add(employee);
}
return list1;
}
  1. Lambda表达式遍历过程
1
list.forEach(System.out::println);
  1. Lambda变量作用域
    1.

  2. 函数式接口,接口中只有一个抽象方法

    1. 语法格式一:无参数,无返回值

二、Stream

  1. 获取数据源
    1. stream()-为集合创建串行流
    2. parallelStream()-为集合创建并行流
  2. 条件处理
    1. 可以结合lambda表达式
    2. forEach–迭代流中的每一个数据
    3. map–映射每个元素到对应的结果
    4. filter–通过设置条件过滤元素
    5. limit–获取指定数量的流
    6. sorted–对流进行排序
  3. 收集结果Collectors
    1.
1
2
3
4
5
6
7
8
9
10
11
12
13
List<User> list = Arrays.asList(
new User("张三", 20, 3000),
new User("李四", 20, 2000),
new User("王五", 21, 5000));

Predicate<User> predicate1 = user -> user.getAge()<21;
Predicate<User> predicate2 = user -> user.getSalary()>2000;
List<User> collect = list.stream()
//相当于&&
.filter(predicate1)
.filter(predicate2)
.collect(Collectors.toList());
System.out.println(collect);
1
2
3
4
List<User> collect = list.stream()
//相当于&&
.filter(predicate1.)
.collect(Collectors.toList());

Collections.emptyList()

生成一个空的list

Collections.emptySet()

生成一个空的set

好处:

​ 不用返回null,方便调用时判断