Java8 lambda表达式学习总结

最近把《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,用得好代码很简洁。

留坑,待填。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容