- Stream是元素的集合,这点让Stream看起来用些类似Iterator;
- 可以支持顺序和并行的对原Stream进行汇聚的操作;
http://www.importnew.com/24300.html
http://www.jianshu.com/p/cbd5713a8f26
创建流->转换流->聚合流
创建流:
数组创建Stream: Arrays.stream()
和Stream.of()
集合创建:
1,Stream.of()
2,Stream.generate()
Stream.generate(new Supplier<Double>() { @Override public Double get() { return Math.random(); } }); Stream.generate(() -> Math.random()); Stream.generate(Math::random); 这三个的意思是一样的。 generate是建立了一个无限长度的Stream 其元素的生成是通过给定的Supplier(这个接口可以看成一个对象的工厂,每次调用返回一个给定类型的对象) 例如: Stream.generate(()->"HelloWorld").forEach(System.out::println); 无限打印“Hello World”
3,Stream.iterate()
Stream.iterate(seed,func(seed)) 相当于每一次取出一个值,分别是 seed、func(seed)、func(func(seed)) 例如: Stream.iterate(1, item -> item + 1).limit(10).forEach(System.out::println); 打印出1--10
4,Collection.stream()
5,Collectrion.parallelStream()//创建并行的流
转换流
- 过滤操作
filter,distinct
- 变换操作
map,flatMap
- 拆分合并流操作
limit,skip,concat,peek
- 排序操作
sorted,unordered
flatMap: 是e->Stream的转换,把每一个元素变成一个流,然后合并起来
private static void flatMapStream() { String [] strs1 = {"a","b","c"}; String [] strs2 = {"d","e","f"}; String [] strs3 = {"a","g","h"}; Arrays.asList(strs1,strs2,strs3) .stream() .flatMap(str -> Stream.of(str)) .map(s -> s+",") .forEach(System.out::print); } 流本身是一个 Stream(<String[]>) ,就是关于String[]的一个流,通过flatMap之后,把每一个String[]元素里面的内容拿出来了,做成了一个新的流
concat
static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
将两个Stream合并成一个,这个方法一次只能用来合并两个Stream,不能一次多个Stream合并。
Sorted
sorted(Comparator< ? super T > comparator)
可以自定义多个条件的比较
Arrays.asList("ae", "f", "gqet", "abcd", "ertyu", "zxc")
.stream()
.sorted(
Comparator.comparing(String::length)
.thenComparing(String::compareTo)
)
.forEach(System.out::println);
.Stream的结果处理
- 遍历
forEach
- 聚合
reduce
- Optional类型
- 收集
collect