作者:微信小助手
发布时间:2020-11-29T10:47:31
点击上方关注这个神奇的公众号~ 来源:blog.csdn.net/mu_wind/article/details/109516995 用传统的迭代处理也不是很难,但代码就显得冗余了,跟Stream相比高下立判。 Java 8 是一个非常成功的版本,这个版本新增的 那么什么是 另外, 1、通过 2、使用 3、使用 输出结果: 0 3 6 9 0.6796156909271994 0.1914314208854283 0.8116932592396652 除了直接创建并行流,还可以通过 在使用stream之前,先理解一个概念: 接下来,大批代码向你袭来!我将用20个案例将Stream的使用整得明明白白,只要跟着敲一遍代码,就能很好地掌握。 这是后面案例中使用的员工类:
先贴上几个案例,水平高超的同学可以挑战一下:
1 Stream概述
Stream
,配合同版本出现的 Lambda
,给我们操作集合(Collection)提供了极大的便利。Stream
?
Stream
将要处理的元素集合看作一种流,在流的过程中,借助Stream API
对流中的元素进行操作,比如:筛选、排序、聚合等。Stream
可以由数组或集合创建,对流的操作分为两种:
Stream
有几个特性:
2 Stream的创建
Stream
可以通过集合数组创建。java.util.Collection.stream()
方法用集合创建流List<String> list = Arrays.asList("a", "b", "c");
// 创建一个顺序流
Stream<String> stream = list.stream();
// 创建一个并行流
Stream<String> parallelStream = list.parallelStream();
12345java.util.Arrays.stream(T[] array)
方法用数组创建流int[] array={1,3,5,6,8};
IntStream stream = Arrays.stream(array);
12Stream
的静态方法:of()、iterate()、generate()
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 3).limit(4);
stream2.forEach(System.out::println); // 0 2 4 6 8 10
Stream<Double> stream3 = Stream.generate(Math::random).limit(3);
stream3.forEach(System.out::println);
1234567
stream
和parallelStream
的简单区分: stream
是顺序流,由主线程按顺序对流执行操作,而parallelStream
是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。例如筛选集合中的奇数,两者的处理不同之处:如果流中的数据量足够大,并行流可以加快处理速度。
parallel()
把顺序流转换成并行流:Optional<Integer> findFirst = list.stream().parallel().filter(x->x>6).findFirst();
13 Stream的使用
Optional
。
Optional
类是一个可以为null
的容器对象。如果值存在则isPresent()
方法会返回true
,调用get()
方法会返回该对象。更详细说明请见:菜鸟教程Java 8 Optional类案例使用的员工类
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("Tom", 8900, "male", "New York"));
personList.add(new Person("Jack", 7000, "male", "Washington"));
personList.add(new Person("Lily", 7800, "female", "Washington"));
personList.add(new Person("Anni", 8200, "female", "New York"));
personList.add(new Person("Owen", 9500, "male", "New York"));
personList.add(