JDK8新特性——stream API 的使用

1.Stream关注的是对数据的运算,与CPU打交道
集合关注的是数据的存储,与内存打交道

2.Stream 自己不会存储元素
Stream不会改变源对象,相反,他们会返回一个持有结果的新Stream
Stream操作是延迟执行的,这意味着他们会等到需要结果的时候才执行

3.Stream执行流程
(1)Stream的实例化
(2)一系列的中间操作(过滤,映射,.......)
(3)终止操作

4.说明:
4.1一个中间操作链,对数据源的数据进行处理
4.2一旦终止操作,就执行中间操作链,并产生结果。之后,不会再被使用。

123456789
//创建Stream方式一:通过集合 @Test public void test1(){ List<Employee> employees= EmployeeData.getEmployeies(); //default Stream<E> 返回一个顺序流 Stream<Employee> stream=employees.stream(); //default Sream<E>parallelSreamI():返回一个并行流 Stream<Employee> parallelStream = employees.parallelStream(); }
12345678910111213
//创建stream方式二:通过数组 public void test2(){ int[] array={1,2,3,4,6,7,8}; //调用Arrays类的static<T> Stream<T> stream(T[] array):返回一个流 IntStream stream = Arrays.stream(array); Employee e1=new Employee(1001,"tom"); Employee e2=new Employee(1002,"jerry"); Employee e3=new Employee(1003,"Mack"); Employee[] employees={e1,e2,e3}; Stream<Employee> stream1 = Arrays.stream(employees); }
12345678
//创建Stream方式四:创建无限流 @Test public void test4(){ //遍历前10个偶数 Stream.iterate(0,t->t+2).limit(10).forEach(System.out::println); //输出10个随机数 Stream.generate(Math::random).limit(10).forEach(System.out::println); }
1234567891011121314151617181920212223
@Test public void test(){ //筛选与切片 List<Employee> employeies = EmployeeData.getEmployeies(); //filter(Predicate p)——接收lambda,从流中排除某些元素 Stream<Employee> stream = employeies.stream(); stream.filter(e->e.getSalary()>5000).forEach(System.out::println); //截断流 输出前三 employeies.stream().limit(3).forEach(System.out::println); //跳过前三 employeies.stream().skip(3).forEach(System.out::println); //distinct()——筛选,去重,通过流所生成元素的hashCode()和equals()去除重复元素 employeies.add(new Employee(50,"刘强东",40,6000d)); employeies.add(new Employee(50,"刘强东",40,6000d)); employeies.add(new Employee(50,"刘强东",40,6000d)); employeies.add(new Employee(50,"刘强东",40,6000d)); employeies.stream().distinct().forEach(System.out::println); }
12345678910111213141516
@Test public void test3(){ ArrayList list=new ArrayList<>(); list.add(1); list.add(2); list.add(3); ArrayList<Integer> list2=new ArrayList<>(); list2.add(4); list2.add(5); list2.add(6); //list.add(list2);. list.addAll(list2); System.out.println(list); }
vant van-image无法读取本地图片
JKD8的新特性——构造器引用及数组引用
评论
zhangrenxian123小白菜
文章28
分类5
标签2