当前位置: 代码迷 >> 综合 >> java8 Stream流操作介绍
  详细解决方案

java8 Stream流操作介绍

热度:55   发布时间:2024-01-21 18:56:51.0

流操作在本人接触到的部分,都是处理集合容器Collection,加入流操作主要是为了函数式编程,在很大程度上可以简化代码

简洁的代码处理复杂逻辑这是每个程序猿的追求,废话不多说,开始介绍

使用Stream基本步骤

1. 创建Stream;
2. 转换Stream,每次转换原有Stream对象不改变,返回一个新的Stream对象(**可以有多次转换**);
3. 对Stream进行聚合(Reduce)操作,获取想要的结果;

Stream 创建

//Lists是Guava中的一个工具类
List<Integer> nums = Lists.newArrayList(1,null,3,4,null,6);
nums.stream().filter(num -> num != null).count();
<pre name="code" class="java">/**
of方法:有两个overload方法,一个接受变长参数,一个接口单一值
*/
Stream<Integer> integerStream = Stream.of(1, 2, 3, 5);
Stream<String> stringStream = Stream.of("taobao");
/**
generator方法:生成一个无限长度的Stream,其元素的生成是通过给定的Supplier
*/
Stream.generate(new Supplier<Double>() {@Overridepublic Double get() {return Math.random();}
});
Stream.generate(() -> Math.random());
Stream.generate(Math::random);/**
iterate方法:也是生成无限长度的Stream,和generator不同的是,其元素的生成是重复对给定的种子值(seed)
调用用户指定函数来生成的。其中包含的元素可以认为是:seed
*/
Stream.iterate(1, item -> item + 1).limit(10).forEach(System.out::println);


 
 

所有集合类都可以直接调用stream()方法返回一个Stream对象

这个在本文的第一个例子中就展示了从List对象获取其对应的Stream对象,如果查看Java doc就可以发现Collection接口有一个stream方法,所以其所有子类都都可以获取对应的Stream对象。

public interface Collection<E> extends Iterable<E> {//其他方法省略default Stream<E> stream() {return StreamSupport.stream(spliterator(), false);}
}
转换Stream
转化Stream方法有很处理方法,此处全部介绍,介绍几种,其余方法的使用都差不多

1. distinct: 对于Stream中包含的元素进行去重操作(去重逻辑依赖元素的equals方法),新生成的Stream中没有重复的元素;

List<String> list = Arrays.asList("aa"
  相关解决方案