目录
Stream 的中间操作
多个
中间操作
可以连接起来形成一个
流水线
,除非流水 线上触发终止操作,否则
中间操作不会执行任何的处理
! 而在
终止操作时一次性全部处理,称为“惰性求值”
。
代码演示
①创建测试类如下
package com.csdn.test;
import com.csdn.entity.Employee;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
/**
* @author summer
* @date 2022-04-16 14:14
*/
public class TestMiddle1 {
List<Employee> employees = Arrays.asList(
new Employee("张三", 18, 6666.66),
new Employee("李四", 38, 3333.66),
new Employee("王五", 32, 4444.66),
new Employee("赵六", 42, 5555.66),
new Employee("田七", 21, 9999.66),
new Employee("王八",19,8888.66),
new Employee("王八",19,8888.66),
new Employee("王八",19,8888.66),
new Employee("张九", 52, 7777.66)
);
}
②测试filter
@Test
public void test1(){
//测试 filter
// 需求,输出年龄大于40岁的员工信息
//获取一个流
Stream<Employee> stream = employees.stream();
//执行中间操作返回一个新流
Stream<Employee> employeeStream = stream.filter(e -> e.getAge() > 40);
// 执行终止操作输出
employeeStream.forEach(System.out::println);
}
结果
Employee{name='赵六', age=42, salary=5555.66}
Employee{name='张九', age=52, salary=7777.66}
③测试limit
@Test
public void test2(){
// 需求,输出工资大于7000的员工,只需要前4个
employees.stream().filter(e->e.getSalary()>7000).limit(4).forEach(System.out::println);
}
④测试skip
@Test
public void test3(){
// 需求,输出工资大于7000的员工,跳过前2个
employees.stream().filter(e->e.getSalary()>7000).skip(2).forEach(System.out::println);
}
⑤测试distinct
调用这个中间操作需要在Employee类中重写hashCode与equals方法,否则不会生效的哦
@Test
public void test4(){
// 需求,输出工资大于7000的员工,跳过前2个且去除重复数据
// 一定要记得在Employee类中重写hashCode与equals方法
employees.stream().filter(e->e.getSalary()>7000).skip(2).distinct().forEach(System.out::println);
}
测试类完整代码
package com.csdn.test;
import com.csdn.entity.Employee;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
/**
* @author summer
* @date 2022-04-16 14:14
*/
public class TestMiddle1 {
List<Employee> employees = Arrays.asList(
new Employee("张三",18,6666.66),
new Employee("李四",38,3333.66),
new Employee("王五",32,4444.66),
new Employee("赵六",42,5555.66),
new Employee("田七",21,9999.66),
new Employee("王八",19,8888.66),
new Employee("王八",19,8888.66),
new Employee("王八",19,8888.66),
new Employee("张九",52,7777.66)
);
@Test
public void test4(){
// 需求,输出工资大于7000的员工,跳过前2个且去除重复数据
// 一定要记得在Employee类中重写hashCode与equals方法
employees.stream().filter(e->e.getSalary()>7000).skip(2).distinct().forEach(System.out::println);
}
@Test
public void test3(){
// 需求,输出工资大于7000的员工,跳过前2个
employees.stream().filter(e->e.getSalary()>7000).skip(2).forEach(System.out::println);
}
@Test
public void test2(){
// 需求,输出工资大于7000的员工,只需要前4个
employees.stream().filter(e->e.getSalary()>7000).limit(4).forEach(System.out::println);
}
@Test
public void test1(){
//测试 filter
// 需求,输出年龄大于40岁的员工信息
//获取一个流
Stream<Employee> stream = employees.stream();
//执行中间操作返回一个新流
Stream<Employee> employeeStream = stream.filter(e -> e.getAge() > 40);
// 执行终止操作输出
employeeStream.forEach(System.out::println);
}
}