JDK8 特性

java8
最多的两个特性是lambda和stream
1> lambda用来解决匿名类问题, 适用于集合排序
2> stream用来操作集合,和scala有点类似, 可以对集合做map reduce
还可以有类似SQL的groupingBy操作

--reduce() 是将集合中所有值结合进一个,Reduce类似SQL语句中的sum(), avg() 或count()
--如果要用原生的java来实现reduce很麻烦,要手动遍历集合,再做逻辑运算。 类似以前使用收集日志的功能

3> 其他还有 Optional.ofNullable 可以忽略子对象为空的情况


map(Function)
filter(Predicate)
forEach(Consumer)

[table]
|Interface | Argument | Return|
|Consumer<T> |T | void|
|Function<T,R> |T | R |
|Predicate<T> |T | boolean|
|Supplier<T> |none | T|
[/table]

方法引用是使用两个冒号::这个操作符号,可以用lambda表达式来取代
调试peek方法,打印出内容,有点像js中的alert


Optional
有注意到,剛剛 Stream 的 findFirst 傳回的型態是 Optional 嗎?為什麼?因為也許過濾完每一行之後,沒有符合的條件。
那為什麼不傳回 null?嗯?Java 開發者最熟悉的 Exception 之一 NullPointerException 應該足以解釋傳回 Optional 而不是 null,JSR166 Java 並行 API 領導者 Doug Lea 討厭 null,快速排序發明者、圖靈獎得主 Tony Hoare 甚至說,null 的使用造成了數十億美元的損失。
Stream API 中有幾個方法都傳回 Optional,像是 findAny、findFirst、max、min、reduce 等方法。

max sum 就是reduce的一部分
sum() reduce(0,(a,b)->a+b)
max() reduce((max,len)->len>max?len:max)

collect是一种高级的reduce
可以用来groupby
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值