java 8 Stream

  1. Stream是元素的集合,这点让Stream看起来用些类似Iterator;
  2. 可以支持顺序和并行的对原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
原文地址:https://www.cnblogs.com/Coder-Pig/p/6780885.html