Day77.StreamAPI的概述与Stream的实例化 -Java8其他新特性
强大的Stream APIStream API的概述*1. Stream关注的是对数据的运算,与CPU打交道*集合关注的是数据的存储,与内存打交道**2. Stream 自己不会储存元素。*Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。*Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行**3. Stream 执行流程*① Stream的实例化*②
·
强大的Stream API
Stream API的概述
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOvrRMJU-1603202543233)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020210212628.png)]](https://i-blog.csdnimg.cn/blog_migrate/feed8a7311caef691606d83005e1dd93.png#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vEV290f-1603202543235)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020210757548.png)]](https://i-blog.csdnimg.cn/blog_migrate/ab2ff239ea8b061743ca6c9c86421c06.png#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ucW9U7Wx-1603202543238)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020211021981.png)]](https://i-blog.csdnimg.cn/blog_migrate/d9df0d7523600e6984001822c1f4049c.png#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qqL89u0v-1603202543247)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020211216233.png)]](https://i-blog.csdnimg.cn/blog_migrate/27584a8527d53e86ecf3164f660088fe.png#pic_center)
* 1. Stream关注的是对数据的运算,与CPU打交道
* 集合关注的是数据的存储,与内存打交道
*
* 2. Stream 自己不会储存元素。
* Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
* Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行
*
* 3. Stream 执行流程
* ① Stream的实例化
* ② 一系列的中间操作(过滤、映射、...)
* ③ 终止操作
*
* 4. 说明
* ①一个中间操作链,对数据源的数据进行处理
* ②一旦执行终止操作,就执行中间操作链,并产生结果。之后,此Stream不能再被使用
*
Stream的实例化
方式一: 通过集合
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B4eupORP-1603202543249)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020213232574.png)]](https://i-blog.csdnimg.cn/blog_migrate/2f723dc33fc379548be527174548e4e8.png#pic_center)
EmployeeData
提供用于测试的数据
/**
* 提供用于测试的数据
*
* @author 阿昌 邮箱:995931576@qq.com
*
*/
public class EmployeeData {
public static List<Employee> getEmployees(){
List<Employee> list = new ArrayList<>();
list.add(new Employee(1001, "马化腾", 34, 6000.38));
list.add(new Employee(1002, "马云", 12, 9876.12));
list.add(new Employee(1003, "刘强东", 33, 3000.82));
list.add(new Employee(1004, "雷军", 26, 7657.37));
list.add(new Employee(1005, "李彦宏", 65, 5555.32));
list.add(new Employee(1006, "比尔盖茨", 42, 9500.43));
list.add(new Employee(1007, "任正非", 26, 4333.32));
list.add(new Employee(1008, "扎克伯格", 35, 2500.32));
return list;
}
}
//创建Stream方式一: 通过集合
@Test
public void test1(){
List<Employee> employees = EmployeeData.getEmployees();
// default Stream<E> stream() : 返回一个顺序流
Stream<Employee> stream = employees.stream();
// default Stream<E> parallelStream() : 返回一个并行 (并行操作的去获取数据)
Stream<Employee> parallelStream = employees.parallelStream();
}
创建Stream方式二: 通过数组
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6Nc2hKY-1603202543250)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020214018046.png)]](https://i-blog.csdnimg.cn/blog_migrate/03218595ba52c9f3b3d45e90aed9dbfb.png#pic_center)
//创建Stream方式二: 通过数组
@Test
public void test2(){
int[] arr1 = new int[]{1,2,3,4,5,6,7,8,9,10};
// 调用Arrays类的静态方法: static <T> Stream<T> stream(T[] array): 返回一个
IntStream stream = Arrays.stream(arr1);
Employee e1 = new Employee(1001,"李小姐");
Employee e2 = new Employee(1002,"张先生");
Employee[] arr2 = new Employee[]{e1,e2};
Stream<Employee> stream1 = Arrays.stream(arr2);
}
创建Stream方式三: 通过Stream的of()
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LWoFQixG-1603202543251)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020214743245.png)]](https://i-blog.csdnimg.cn/blog_migrate/83b79481ba94e9f4a6ade5ff7becaf43.png#pic_center)
//创建Stream方式三: 通过Stream的of()
@Test
public void test3(){
Stream<Integer> integerStream = Stream.of(2, 3, 4, 8, 9, 6);
}
创建Stream方式四: 创建无限流
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNnAddf3-1603202543252)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201020215103851.png)]](https://i-blog.csdnimg.cn/blog_migrate/9df8b24ad2696b96c3c37797c4a98e73.png#pic_center)
//创建Stream方式四: 创建无限流
@Test
public void test4(){
// 迭代 public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)
//遍历从前十个偶数
Stream.iterate(0,t -> t + 2).limit(10).forEach(System.out::println);
// 生成 public static<T> Stream<T> generate(Supplier<T> s)
//生成输出10个随机数
Stream.generate(Math::random).limit(10).forEach(System.out::println);
}
更多推荐



所有评论(0)