测试Stream的中间操作
- 筛选与切片
- filter(Predicate p) -接受Lambda,从流中排除某些元素
- limit(n) -截断流,使其元素不超过给定数量
- skip(n) -跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空的元素
- distinct()-筛选,通过流所生成元素的hashCode()和equals() 去除重复元素
- @author yangfan
- 映射
- map(Function f) -接受一个函数作为参数,将元素转换成其他形式或提取信息,该函数会被被应用到每一个元素上,并将其映射成一个新的元素
- flatMap(Function f) - 接收一个函数作为参数,将流中的每个值都换成另外一个流,然后把所有的流连成一个流
- 排序
- sort() -自然排序
- sorted(Comparator com) -定制排序
public class StreamAPITest1 {
//1.筛选与切片
@Test
public void test1(){
List< Employee > list = EmployeeData.getEmployees();
// filter(Predicate p) -接受Lambda,从流中排除某些元素
Stream< Employee > stream = list.stream();
//查询工资表中员工工资大于7000的员工信息
stream.filter(employee -> employee.getSalary()>7000).forEach(System.out::println);
System.out.println();
// limit(n) -截断流,使其元素不超过给定数量
Stream< Employee > stream1 = list.stream();
stream1.limit(3).forEach(System.out::println);
System.out.println();
// skip(n) -跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流。与limit(n)互补。
Stream< Employee > stream2 = list.stream();
stream2.skip(9).forEach(System.out::println);
System.out.println();
// distinct()-筛选,通过流所生成元素的hashCode()和equals() 去除重复元素
list.add(new Employee(1010,"小凡",35,8000));
list.add(new Employee(1010,"小凡",35,8000));
list.add(new Employee(1010,"小凡",35,8000));
list.add(new Employee(1010,"小凡",35,8000));
System.out.println(list);
System.out.println();
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 > list1 = EmployeeData.getEmployees();
Stream< String > stream = list1.stream().map(Employee::getName);
stream.filter(name ->name.length()>3).forEach(System.out::println);
//flatMap(Function f) - 接收一个函数作为参数,将流中的每个值都换成另外一个流,然后把所有的流连成一个流
}
//排序
@Test
public void test3(){
//sort() -自然排序
List list=Arrays.asList(12,45,78,96,41,11,5,6,7);
list.stream().sorted().forEach(System.out::println);
//抛异常。原有:Employee没有实现Comparable接口
// List<Employee> list1=EmployeeData.getEmployees();
// list1.stream().sorted().forEach(System.out::println);
//sorted(Comparator com) -定制排序
List<Employee> list1=EmployeeData.getEmployees();
list1.stream().sorted((e1,e2)-> Integer.compare(e1.getAge(),e2.getAge())).forEach(System.out::println);
}
}