Java8 lambda表达式学习总结

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


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

int sum = 0;
ListaList = 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表达式学习总结)