Stream的中间化操作有 ①筛选和切片 ② 映射 ③排序
注:EmployeeData类的内容参考L:Lamdba表达式(三)—方法引用&构造器引用&数组引用_云集千祥的博客-优快云博客
package lamdba;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
/**
* 测试Stream的中间操作
*/
public class StreamAPTTest1 {
//刷选与切片
@Test
public void test1(){
List<Employee> list= EmployeeData.getEmployee();
//filter(Predicate p) 接受lamdba,从流中排除某些元素
// 查询工资大于7000的员工
list.stream().filter(e-> e.getSalary()>7000).forEach(System.out::println);
//list.stream().filter(e->e.getName().contains("马")).forEach(System.out::println);
System.out.println();
//limit(n) --截断流 ,使其元素不超过给定数量
list.stream().limit(1).forEach(System.out::println);
System.out.println();
//skip(n) -- 跳过元素, 返回一个扔掉前n个元素的流,若流中元素不足n个,则返回一个空流,与limit(n)互补
list.stream().skip(3).forEach(System.out::println); // 挑过前3个元素
System.out.println();
//distinct()筛选,通过流所生成的元素的hashcode()和equals()去除重复数据
list.add(new Employee(1009,"dream",25,9999.0));
list.add(new Employee(1009,"dream",25,9999.0));
list.add(new Employee(1009,"dream",25,9999.0));
list.stream().distinct().forEach(System.out::println);
}
//映射
@Test
public void test2(){
/**
* map(function f) 接受一个函数座位参数,将元素转为其他形式或提取信息,该函数会被
* 应用到每个元素,并将映射成一个新的元素。
*/
List<String> list= Arrays.asList("aa","bb","cc","dd");
list.stream().map(str->str.toUpperCase()).forEach(System.out::println);
//练习: 获取员工姓名长度大于3的员工的姓名
List<Employee> employees = EmployeeData.getEmployee();
Stream<String> namesStream=employees.stream().map(Employee::getName);
namesStream.filter(name -> name.length()>3).forEach(System.out::println);
}
//3.排序
@Test
public void test4(){
//sorted() -- 自然排序
List<Integer> list=Arrays.asList(12,15,36,94,-8,2,659,9,51);
list.stream().sorted().forEach(System.out::println);
//sorted(Comparator com) 定制排序
List<Employee> employee = EmployeeData.getEmployee();
employee.stream().sorted((e1,e2)->{
int ageValue=Integer.compare(e1.getAge(),e2.getAge()) ;
if (ageValue !=0){
return ageValue;
}else {
return Double.compare(e1.getSalary(),e2.getSalary());
}
}).forEach(System.out::println);
}
}