項目結構是這樣的
User是一個普通的pojo類
UserCompare是一個實現了Comprator的類
現在我們有一個需求:給一個user組成的list 按照user的年齡排序。實現不難,代碼如下:
這種方法由於sort方法的第二個參數是Comparator 所以你要寫一個實現類(我這裡是UserCompare類),並且override該接口的實現方法。
java8提供了lambda來簡化,有了lambda程序員從此不加班呀~
剛才那個Comparator的實現類以及內部若干代碼就都省了,代之以lambda表達式。
另外,IntelliJ會提示你改成更好的寫法
實現類裡有多少代碼,你就省了多少行代碼。
高興了半天,到底是什麼原理呢?其實是java8新提供的語法糖。
我們打開java1.8 Comparator的定義,發現了類定義上面多了一個@FunctionalInterface
對,1.8多了一個概念就是FunctionalInterface,這個Comparator就是一個FunctionalInterface
有了這個注解,原來使用實現類的地方就可以代之以lambda表達式。
我水平有限,如果你看到這還沒明白,下圖可以幫助理解,圖1是實現類,圖2是把實現類沒用的地方都抹掉了。
對比一下吧,lambda表達式就是允許你把沒用的代碼都去掉!最少的代碼,一樣的功能!