作者:曹伟,叩丁狼教育高级讲师。原创文章,转载请注明出处。
详解Stream操作
操作步骤
使用Stream API操作数据可以分为以下几个步骤:
1)创建流:
通过数据源(如:集合、数组)获取流
2)处理流:(中的数据)
对流中的数据进行处理(处理是延迟执行的)
3)收集流:(中的数据)
通过调用收集方法,真正执行处理操作,并产生结果
创建流
创建一个流非常简单,有以下几种常用的方式:
1)Collection的默认方法stream()和parallelStream()
2)Arrays.stream()
3)Stream.of()
4)Stream.iterate()//迭代无限流(1, n->n +1)
5)Stream.generate()//生成无限流(Math::random)
代码实现
@Test
public void testCreateStream() throws Exception {
// 1.Collection的默认方法stream()和parallelStream()
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();// 获取顺序流
Stream<String> parallelStream = list.parallelStream();
// 2.Arrays.stream()
IntStream intStream = Arrays.stream(new int[] { 1, 2, 3 });
Stream<Integer> IntegerStream = Arrays.stream(new Integer[] { 1, 2, 3 });
// 3.Stream.of()
Stream<Integer> IntegerStream2 = Stream.of(1, 2, 3, 4);
IntStream intStream2 = IntStream.of(1, 2, 3);
// 4.Stream.iterate()//迭代无限流
// Stream.iterate(1, n->n +1).forEach(System.out::println);
Stream.iterate(1, n -> n + 1).limit(100).forEach(System.out::println);
// 5.Stream.generate()//生成无限流
// Stream.generate(Math::random).forEach(System.out::println);
Stream.generate(Math::random).limit(2).forEach(System.out::println);
}
处理流
筛选和切片
filter(Predicate<T> p):过滤(根据传入的Lambda返回的ture/false 从流中过滤掉某些数据(筛选出某些数据))
distinct():去重(根据流中数据的 hashCode和 equals去除重复元素)
limit(long n):限定保留n个数据
skip(long n):跳过n个数据
图解:

代码实现

本文详细介绍了Java8 Stream的操作,包括创建、处理和收集流的各个步骤。内容涵盖filter、distinct、limit、skip、map、flatMap、sorted等方法的使用,以及查找匹配、统计、归约、汇总、分组和分区等实用技巧。同时,对比了Stream与Collection的区别,并对Stream的惰性执行和一次性消费特性进行了说明。
最低0.47元/天 解锁文章
948

被折叠的 条评论
为什么被折叠?



