一.Java里面对Stream的定义:
A sequence of elements supporting sequential and parallel aggregate operations.
支持顺序和集合并行操作的一系列元素。
(1)Stream是元素的集合,类似于Iterator,单向,不可往复,数据只能遍历一次,遍历过一次数据即用尽了
(2)Stream 可以并行化操作,迭代器只能命令式地、串行化操作;
(3)Stream 的另外一大特点是,数据源本身可以是无限的。
二.创建Stream
1.通过Stream接口的静态工厂方法:
(1)of方法;
(2) generate方法;
(3)iterate方法;
import java.util.function.Supplier;
import java.util.stream.Stream;
public class NewStream {
public static void main(String[] args) {
//第一种 of方法;
int shuzu[] = {4, 5, 6, 7, 8};
Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
integerStream.forEach(System.out::println);
Stream<String> stringStream = Stream.of("taobao", "weixin", "baidu", "toutiao");
stringStream.forEach(System.out::println);
Stream.of(shuzu).forEach(System.out::println);
//第二种 generate方法
Stream.generate(new Supplier<Double>() {
@Override
public Double get() {
return Math.random();
}
}).limit(10).forEach(System.out::println);
//第三种 iterate方法
Stream.iterate(1, item -> item + 1).limit(10).forEach(System.out::println);
}
}
2.通过collection的子类来获取Stream(Collection接口有一个Stream方法,所以其所有子类都可以获取对应的Stream对象。)
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.stream().forEach(System.out::println);
LinkedList linkedList = new LinkedList();
linkedList.add(6);
linkedList.add(7);
linkedList.add(8);
linkedList.add(9);
linkedList.add(10);
//并行流
linkedList.parallelStream().forEach(System.out::println);
Set hashSet = new HashSet();
hashSet.add(11);
hashSet.add(12);
hashSet.stream().forEach(System.out::println);
三 .Stream操作
操作类型 |
接口方法 |
|
Intermediate (中间操作) |
无状态(Stateless) | map(mapToInt、mapToLong、flatmap、mapToDouble、 flatMapToInt、flatMapToLong、flatMapToDouble)、unordered、filter、 peek、 parallel 、sequential 、isParallel |
有状态(Stateful) | distinct、 sorted、limit、 skip | |
Terminal (最终操作) |
非短路操作 | forEach、forEachOrdered、 toArray、 reduce、collect、 max、min、count、 |
Short-circuiting |