Java8 lambda表达式学习总结

作者: 提笔忘字欲言又止 | 来源:发表于2016-05-16 23:47 被阅读0次

    最近把《Java8 Lambda》这本书翻完了,就总结一下印象比较深刻的细节吧。


    • lambda表达式的参数必须是不变的,至少用起来是不变的。

    int sum = 0;
    List<Integer>aList = Arrays.asList(1,2,3,4,5);
    aList.stream().forEach(()->{sum++;}); //这是错误的例子

    + 返回stream类型的方法是lazy方法
    > lazy方法里面lambda参数是不会立即求值的
    ```java
    aList.stream().map(e->{
        System.out.println(e);
        return e;
    });
    

    以上代码是不会输出任何aList里面的元素。

    • 返回非stream类型的方法则为eager方法

    eager方法则会立即求值

    aList.stream().map(e->{
        System.out.println(e);
        return e;
    }).count();
    

    以上代码则会输出aList里面的每个元素。

    • 能用聚合函数的尽量使用聚合函数

    在内置的聚合函数能满足需求的情况下, 如果只是再实现内置聚合函数的话真的是多此一举,至少代码看起来真的好难看,性能也不一定比内置的好。//之前这句话有笔误。

    • 根据业务需求选用并行/非并行的stream。

    选择并行stream的话要主要考虑:

    • stream的大小
    • 可用的线程数
    • 操作块的大小
    • 方法引用真的很bug,用得好代码很简洁。

    留坑,待填。

    相关文章

      网友评论

        本文标题:Java8 lambda表达式学习总结

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