美文网首页
Java8新特性:Lambda表达式和Stream API

Java8新特性:Lambda表达式和Stream API

作者: Vekaco | 来源:发表于2018-05-16 21:02 被阅读0次

    1.什么是Lambda表达式?

    Lambda表达式,即匿名(闭包)函数,因其基于数学中的λ演算得名;Java8中的新特性之一就是支持Lambda表达式,他支持简单的“函数式编程”。

    2.基本语法(可以省略参数类型,支持类型推断)

    i.(parameters) -> expression

    ii.(parameters) -> statement

    iii.(parameters) -> {statements}

    3.Stream API

    概念: 

    Java8对于元素集合给出的统一、快速、并行操作的一个方式;可以借助多核优势,以及配合Lambda表达式、链式结构对集合进行方便对操作,可以支持顺序和并行对元素操作的元素集合。

    作用: 

    提供了一种操作大数据接口,让数据操作更容易和更快;使用stream,我们能够对collection的元素进行过滤、映射、排序、去重等许多操作。

    中间方法和终点方法: 

    它具有过滤、映射以及减少遍历数等方法,这些方法分两种:中间方法和终端方法;“流”抽象天生就该是持续的,中间方法永远返回的是Stream,因此如果我们要获取最终结果的话, 必须使用终点操作才能收集流产生的最终结果。区分这两个方法是看他的返回值, 如果是Stream则是中间方法,否则是终点方法。


    4.特性案例

    >替换匿名类

    传统方式 Lambda表达式

    >遍历集合

    传统方式 Lambda表达式+forEach()

    >结合过滤器

    通过调用集合对象stream()方法获得“流”,再调用“流”的filter()方法可以快速对元素进行过滤;

    stream+lambda 过滤出‘J’为首字母的元素

    也可以通过Predicate定义过滤条件,结合stream来进行元素过滤;

    predicate + stream + lambda进行集合元素过滤

    多个Predicate可以做级联进行与(and)和或(or)等;

    predicate进行 and/or级联对集合元素进行过滤

    >Function接口:

    Function<T,R>接受两个泛型,T为输入类型,R为输出结果类型;它接受一个T类型参数,通过定义的函数逻辑处理后,返回R类型结果;并且可以通过andThen(Function f)进行多个function的级联,借助apply(T t)方法可以将Function应用在参数上;

    function + lambda

    >Stream.map()对集合元素一次进行操作:

    传统方式 map() + lambda

    也可以map()结合Function来进行元素操作;

    function + map() + lambda

    >Stream.reduce()对集合元素进行聚合:

    传统方式 reduce() + lambda + get()聚合集合元素

    >sort()进行对集合进行排序:

    结合compareTo()进行默认升序排序;

    compareTo() + sort() + lambda

    实现Comparator接口来进行自定义排序(如倒序);

    Comparator + sort() +lambda

    >结合Collectors进行集合处理:

    过滤并收集集合元素,如以下过滤原List中元素长度大于2的字符串,并将元素收集到新的List中;

    collect() + lambda + Collectors.toList()

    过滤并收集计算元素总数,如以下过滤元素长度大于2的字符串,并计算收集到的元素个数;

    collect() + Collectors.counting() / count() + lambda

    过滤并收集,获得收集后集合的第一个元素;

    findFirst() + get() + lambda

    过滤并通过distinct()进行去重后收集集合元素;

    distinct() + collect() + Collectors.toList() + lambda

    >Stream.xxxMatch(Predicate p)进行元素匹配判断:

    anyMatch()只要集合中任意一个元素符合就返回true;allMatch()需要集合中所有元素都符合才返回true;

    stream() + anyMatch() + allMatch() + lambda

    >Collectors.joining(delimiter)进行元素拼接:

    Collectors.joining()

    >XxxSummaryStatistics+Stream.mapToXxx()进行元素统计分析:

    可以获得集合元素最大值、最小值、平均值、总个数、总和;

    mapToInt() + summaryStatistics() + getMax()/getMin()/getSum()/getAverage()/getCount()

    案例代码:

    https://github.com/Vekaco/Java8Features

    参考文献:

    http://baijiahao.baidu.com/s?id=1589645410830300902&wfr=spider&for=pc

    https://blog.csdn.net/jinzhencs/article/details/50748202/

    相关文章

      网友评论

          本文标题:Java8新特性:Lambda表达式和Stream API

          本文链接:https://www.haomeiwen.com/subject/mldmdftx.html