Java8新特性 --Stream

1、 建立Stream

  1. 建立Stream方式一: 集合类的stream()或 parallelStream()java

    List<String> list = new ArrayList<>();
    Stream<String> stream = list.stream();
  2. 建立Stream方式二: 经过Arrays中的静态方法stream()获取dom

    String[] strings = new String[10];
    Stream<String> stream1 = Arrays.stream(strings);
  3. 建立Stream方式三: 经过Stream 类中的静态方法of()
    java Stream<String> stream2 = Stream.of("aa", "bb", "cc");ide

  4. 建立Stream方式四: 无限流
    迭代:
    java Stream<Integer> stream3 = Stream.iterate(0, (x) -> x + 2);
    生成:
    java Stream.generate(() -> Math.random());函数

2、中间操做

  • 筛选和切片  
      filter 接受Lambda, 从stream中筛选出知足条件的元素。
      limit 限定stram中元素的数量。知足了limit数量之后,stream中之后的迭代终止,相似与短路操做。
      skip(n) 跳过元素,返回一个扔掉了前n个元素的stream。若stream中元素不足n个,则返回一个空stream。与limit(n)互补
      distinct 经过stream中元素的hashCode() 和 equels() 去除重复元素优化

  • 映射
      map 接受Lambda, 将元素转换成其余形式或提取信息。接受一个函数做为参数,该函数会被应用到每一个元素上,并将其映射成一个新的元素。
      flatMap 接受一个函数做为参数,将stream中的每一个值都换成另外一个stream,而后把全部的stream连成一个stream。线程

  • 排序
      sorted() 天然排序 按照Comparable排序
      sorted(Comparator com) 自定义排序 按照comparator排序code

  • 归约
      T reduce(T identity, BinaryOperator accumulator);
      Optional reduce(BinaryOperator accumulator);
      例如: 计算list中全部元素的和
      过程 0 + 1 = 1 + 2 = 3 + .....
      List list1 = Arrays.asList(1,2,3,4,5,6);
      Integer reduce = list1.stream().reduce(0, (x, y) -> x + y);
      System.out.println(reduce); //21
    排序

  • 收集
     Optional max(Comparator<? super T> comparator);
     Collector 接口中方法的实现决定了如何对流执行收集操做(如收集到 List、Set、Map)。可是 Collectors 实用类提供了不少静态法,能够方便地建立常见收集器实例,具体方法与实例以下表:
      
      
    PS:
  1. 内部迭代: 迭代操做由Stream API完成
  2. 外部迭代: 本身写Iteriator

3、 并行流与串行流

并行流 就是把一个内容分红多个数据块,并用不一样的线程分别处理每一个数据块的流。Java 8 中将并行进行了优化,咱们能够很容易的对数据进行并行操做。Stream API 能够声明性地经过 parallel() 与sequential() 在并行流与顺序流之间进行切换。接口

相关文章
相关标签/搜索