zoukankan      html  css  js  c++  java
  • java8新特性Stream用法详解

    1、Stream的使用场景。

    Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一 个则是 Stream API(java.util.stream.*)。

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对

    集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。
    使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数
    据库查询。也可以使用 Stream API 来并行执行操作。简而言之,
    Stream API 提供了一种高效且易于使用的处理数据的方式。

    2、Stream三个操作步骤

    创建 Stream
    一个数据源(如:集合、数组),获取一个流  中间操作
    一个中间操作链,对数据源的数据进行处理  终止操作(终端操作)
    一个终止操作,执行中间操作链,并产生结果。

    3、创建Stream

     public static<T> Stream<T> of(T... values) : 返回一个流

    static <T> Stream<T> stream(T[] array): 返回一个流

    4、Stream的中间操作

    多个中间操作可以连接起来形成一个流水线,除非流水 线上触发终止操作,否则中间操作不会执行任何的处理! 而在终止操作时一次性全部处理,称为“惰性求值”。

     filter(Predicate p) 接收 Lambda , 从流中排除某些元素。
    distinct() 筛选,通过流所生成元素的 hashCode() 和 equals() 去 除重复元素 limit(long maxSize) 截断流,使其元素不超过给定数量。
    skip(long n) 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素 不足 n 个,则返回一个空流。与 limit(n) 互补
    map(Function f) 接收一个函数作为参数,该函数会被应用到每个元 素上,并将其映射成一个新的元素。
    mapToDouble(ToDoubleFunction f) 接收一个函数作为参数,该函数会被应用到每个元 素上,产生一个新的 DoubleStream。 mapToInt(ToIntFunction f) 接收一个函数作为参数,该函数会被应用到每个元 素 上,产生一个新的 IntStream。

    mapToLong(ToLongFunction f) 接收一个函数作为参数,该函数会被应用到每个元 素上,产生一个新的 LongStream。
    flatMap(Function f) 接收一个函数作为参数,将流中的每个值都换成另 一个流,然后把所有流连接成一个流
    sorted() 产生一个新流,其中按自然顺序排序
    sorted(Comparator comp) 产生一个新流,其中按比较器顺序排序。

    5、Stream终止操作

    allMatch(Predicate p) 检查是否匹配所有元素
    anyMatch(Predicate p) 检查是否至少匹配一个元素
    noneMatch(Predicate p) 检查是否没有匹配所有元素
    findFirst() 返回第一个元素
    终端操作会从流的流水线生成结果。其结果可以是任何不是流的 值,例如:List、Integer,甚至是 void 。
    findAny() 返回当前流中的任意元素

    count() 返回流中元素总数
    max(Comparator c) 返回流中最大值
    min(Comparator c) 返回流中最小值
    reduce(T iden, BinaryOperator b) 可以将流中元素反复结合起来,得到一个值。 返回 T 归约 reduce(BinaryOperator b) 可以将流中元素反复结合起来,得到一个值。 返回 Optional<T> 备注:map 和 reduce 的连接通常称为 map-reduce 模式,因 Google 用它 来进行网络搜索而出名。
    forEach(Consumer c)

    collect(Collector c) 将流转换为其他形式。接收一个 Collector接口的 实现,用于给Stream中元素做汇总的方法

    toList List<T> 把流中元素收集到List
    List<Employee> emps= list.stream().collect(Collectors.toList()); toSet Set<T> 把流中元素收集到Set
    Set<Employee> emps= list.stream().collect(Collectors.toSet()); toCollection Collection<T> 把流中元素收集到创建的集合
    Collection<Employee>emps=list.stream().collect(Collectors.toCollection(ArrayList::new)); counting Long 计算流中元素的个数
    long count = list.stream().collect(Collectors.counting()); summingInt Integer 对流中元素的整数属性求和
    inttotal=list.stream().collect(Collectors.summingInt(Employee::getSalary)); averagingInt Double 计算流中元素Integer属性的平均 值 doubleavg= list.stream().collect(Collectors.averagingInt(Employee::getSalary)); summarizingInt IntSummaryStatistics 收集流中Integer属性的统计值。 如:平均值

  • 相关阅读:
    一, 认识一下Python
    VUE
    排序算法6---归并排序算法
    排序算法5---堆排序算法,改进的简单选择排序
    排序算法4---希尔排序算法,改进的直接插入排序
    排序算法3---直接插入排序算法
    排序算法2---简单选择排序
    排序算法1---冒泡排序及其改进版
    10.17写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为: int strcmp(char * p1,char * p2) 设p1指向字符串s1,p2指向字符串s2。要求:当s1=s2时,返回值为0。当s1≠s2时,返回它们两者的第一个不同字符的ASCII码差值(如”BOY”与”BAD”,第二个字母不同,”O”与”A”之差为79-65=14);如果s1>s2,则输出正值;
    10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。
  • 原文地址:https://www.cnblogs.com/liubaihui/p/10627901.html
Copyright © 2011-2022 走看看