1: 匹配和查找
/**
* 匹配和查找
*/
@Test
public void test1() {
List<Employee> employeeList = new ArrayList<>();
employeeList.add(new Employee(1, "张三", 18, 9999.99));
employeeList.add(new Employee(2, "李四", 59, 6666.66));
employeeList.add(new Employee(3, "王五", 28, 3333.33));
employeeList.add(new Employee(4, "赵六", 8, 7777.77));
employeeList.add(new Employee(5, "田七", 38, 5555.55));
employeeList.add(new Employee(6, "马云", 35, 9876.23));
employeeList.add(new Employee(7, "比尔盖茨", 67, 5637.78));
employeeList.add(new Employee(8, "乔布斯", 59, 9387.33));
employeeList.add(new Employee(9, "扎克伯格", 35, 6786.23));
//1:是否所有员工年龄都大于18
boolean allAge = employeeList.stream().allMatch(e -> e.getAge() > 18);
System.out.println(allAge);
System.out.println("------------------------------");
//2:是否存在员工工资大于9000
boolean anyAge = employeeList.stream().anyMatch(e -> e.getSalary() > 9000);
System.out.println(anyAge);
System.out.println("------------------------------");
//3: 是否存在姓“王”的员工,noneMatch()检查是否没有匹配到的元素,存在则返回false,否则返回true
boolean exist = employeeList.stream().noneMatch(e -> e.getName().startsWith("王"));
System.out.println(exist);
System.out.println("------------------------------");
//4: 查找第一个员工
Optional<Employee> first1 = employeeList.stream().findFirst();
Employee first = first1.get();
System.out.println(first);
System.out.println("------------------------------");
//5: 返回任意一个员工
//串行流
//Optional<Employee> any = employeeList.stream().findAny();
//并行流
Optional<Employee> any = employeeList.parallelStream().findAny();
System.out.println(any.get());
System.out.println("------------------------------");
//6:获取员工的个数
long count = employeeList.stream().count();
System.out.println(count);
System.out.println("------------------------------");
//7:获取工资大于6000的员工个数
long count1 = employeeList.stream().filter(e -> e.getSalary() > 6000).count();
System.out.println(count1);
System.out.println("------------------------------");
//8:获取工资最高的员工
//Optional<Employee> max = employeeList.stream().max((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));
Optional<Employee> max = employeeList.stream().max(Comparator.comparingDouble(Employee::getSalary));
System.out.println(max.get());
System.out.println("------------------------------");
//9:获取工资最低的员工
//Optional<Employee> min = employeeList.stream().max((e1, e2) -> -Double.compare(e1.getSalary(), e2.getSalary()));
Optional<Employee> min = employeeList.stream().min(Comparator.comparingDouble(Employee::getSalary));
System.out.println(min.get());
}
运行结果:
false
------------------------------
true
------------------------------
false
------------------------------
Employee{id=1, name='张三', age=18, salary=9999.99}
------------------------------
Employee{id=6, name='马云', age=35, salary=9876.23}
------------------------------
9
------------------------------
6
------------------------------
Employee{id=1, name='张三', age=18, salary=9999.99}
------------------------------
Employee{id=3, name='王五', age=28, salary=3333.33}
2: 规约
/**
* 规约
*/
@Test
public void test2() {
//1: 计算1到10自然数的和
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//Integer sum = list.stream().reduce(0, (x, y) -> x + y);
Integer sum = list.stream().reduce(0, Integer::sum);
System.out.println(sum);
System.out.println("------------------------------");
List<Employee> employeeList = new ArrayList<>();
employeeList.add(new Employee(1, "张三", 18, 9999.99));
employeeList.add(new Employee(2, "李四", 59, 6666.66));
employeeList.add(new Employee(3, "王五", 28, 3333.33));
employeeList.add(new Employee(4, "赵六", 8, 7777.77));
employeeList.add(new Employee(5, "田七", 38, 5555.55));
employeeList.add(new Employee(6, "马云", 35, 9876.23));
employeeList.add(new Employee(7, "比尔盖茨", 67, 5637.78));
employeeList.add(new Employee(8, "乔布斯", 59, 9387.33));
employeeList.add(new Employee(9, "扎克伯格", 35, 6786.23));
//计算所有员工的工资总和
Stream<Double> doubleStream = employeeList.stream().map(Employee::getSalary);
Optional<Double> reduce = doubleStream.reduce(Double::sum);
System.out.println(reduce.get());
Stream<Double> doubleStream1 = employeeList.stream().map(Employee::getSalary);
Optional<Double> reduce1 = doubleStream1.reduce((d1, d2) -> d1 + d2);
System.out.println(reduce1.get());
}
运行结果:
55
------------------------------
65020.869999999995
65020.869999999995
3: 收集
/**
* 收集
*
*/
@Test
public void test3() {
List<Employee> employeeList = new ArrayList<>();
employeeList.add(new Employee(1, "张三", 18, 9999.99));
employeeList.add(new Employee(2, "李四", 59, 6666.66));
employeeList.add(new Employee(3, "王五", 28, 3333.33));
employeeList.add(new Employee(4, "赵六", 8, 7777.77));
employeeList.add(new Employee(5, "田七", 38, 5555.55));
employeeList.add(new Employee(6, "马云", 35, 9876.23));
employeeList.add(new Employee(7, "比尔盖茨", 67, 5637.78));
employeeList.add(new Employee(8, "乔布斯", 59, 9387.33));
employeeList.add(new Employee(9, "扎克伯格", 35, 6786.23));
//查找工资大于6000的员工,返回一个集合
//1:返回List集合
List<Employee> collect = employeeList.stream().filter(e -> e.getSalary() > 6000).collect(Collectors.toList());
collect.forEach(System.out::println);
System.out.println("------------------------------");
//2:返回Set集合
Set<Employee> collect1 = employeeList.stream().filter(e -> e.getSalary() > 6000).collect(Collectors.toSet());
collect1.forEach(System.out::println);
}
运行结果:
Employee{id=1, name='张三', age=18, salary=9999.99}
Employee{id=2, name='李四', age=59, salary=6666.66}
Employee{id=4, name='赵六', age=8, salary=7777.77}
Employee{id=6, name='马云', age=35, salary=9876.23}
Employee{id=8, name='乔布斯', age=59, salary=9387.33}
Employee{id=9, name='扎克伯格', age=35, salary=6786.23}
------------------------------
Employee{id=1, name='张三', age=18, salary=9999.99}
Employee{id=9, name='扎克伯格', age=35, salary=6786.23}
Employee{id=4, name='赵六', age=8, salary=7777.77}
Employee{id=2, name='李四', age=59, salary=6666.66}
Employee{id=8, name='乔布斯', age=59, salary=9387.33}
Employee{id=6, name='马云', age=35, salary=9876.23}