# lambda 表达å¼
## å½ä»¤å¼å彿°å¼
**å½ä»¤å¼ç¼ç¨**ï¼å½ä»¤âæºå¨âå¦ä½å»åäºæ
(how)ï¼è¿æ ·ä¸ç®¡ä½ æ³è¦çæ¯ä»ä¹(what)ï¼å®é½ä¼æç
§ä½ çå½ä»¤å®ç°ã
**声æå¼ç¼ç¨**ï¼åè¯âæºå¨âä½ æ³è¦çæ¯ä»ä¹(what)ï¼è®©æºå¨æ³åºå¦ä½å»å(how)ã
## ä»ä¹æ¯å½æ°å¼ç¼ç¨ï¼
æ¯ä¸ªäººå¯¹å½æ°å¼ç¼ç¨ççè§£ä¸å°½ç¸åã æççè§£æ¯ï¼**å¨å®æä¸ä¸ªç¼ç¨ä»»å¡æ¶ï¼éè¿ä½¿ç¨ä¸å¯åç弿彿°ï¼å¯¹ä»ä»¬è¿è¡å¤çï¼ç¶åå¾å°å¦ä¸ä¸ªå¼çè¿ç¨ã**
ä¸åçè¯è¨ç¤¾åºå¾å¾å¯¹åèªè¯è¨ä¸çç¹æ§å¤è³èªèµãç°å¨è° Java ç¨åºåå¦ä½å®ä¹å½æ°å¼ç¼ç¨è¿ä¸ºæ¶å°æ©ï¼ä½æ¯ï¼è¿æ ¹æ¬ä¸éè¦ï¼
æä»¬å
³å¿çæ¯å¦ä½ååºå¥½ä»£ç ï¼è䏿¯ç¬¦å彿°å¼ç¼ç¨é£æ ¼ç代ç ã
## è¡ä¸ºåæ°å
æç®æ³ççç¥ï¼è¡ä¸ºï¼ä½ä¸ºä¸ä¸ªåæ°ä¼ éç»å½æ°ã
## lambda 管ä¸çª¥è±¹
* å¿åï¼å®ä¸åæ®éçæ¹æ³é£æ ·æä¸ä¸ªæç¡®çåç§°ï¼åå¾å°èæ³å¾å¤ï¼
* 彿°ï¼Lambda彿°ä¸åæ¹æ³é£æ ·å±äºæä¸ªç¹å®çç±»ãä½åæ¹æ³ä¸æ ·ï¼Lambdaæåæ°å表ã彿°ä¸»ä½ãè¿åç±»åï¼è¿å¯è½æå¯ä»¥æåºçå¼å¸¸å表ã
* ä¼ éï¼Lambda表达å¼å¯ä»¥ä½ä¸ºåæ°ä¼ éç»æ¹æ³æåå¨å¨åéä¸ã
* ç®æ´ï¼æ éåå¿åç±»é£æ ·åå¾å¤æ¨¡æ¿ä»£ç ã
## 彿°æè¿°ç¬¦
彿°å¼æ¥å£çæ½è±¡æ¹æ³çç¾ååºæ¬ä¸å°±æ¯Lambda表达å¼çç¾åï¼è¿ç§æ½è±¡æ¹æ³å«ä½å½æ°æè¿°ç¬¦ã
## 彿°å¼æ¥å£ï¼ç±»åæ¨æ
彿°å¼æ¥å£å®ä¹ä¸åªå®ä¹äºä¸ä¸ªæ½è±¡æ¹æ³ï¼å 为æ½è±¡æ¹æ³çç¾åå¯ä»¥æè¿°Lambda表达å¼çç¾åã
彿°å¼æ¥å£çæ½è±¡æ¹æ³çç¾åç§°ä¸ºå½æ°æè¿°ç¬¦ã
æä»¥ä¸ºäºåºç¨ä¸åçLambda表达å¼ï¼ä½ éè¦ä¸å¥è½å¤æè¿°å¸¸è§å½æ°æè¿°ç¬¦ç彿°å¼æ¥å£ã
## Java 8ä¸ç常ç¨å½æ°å¼æ¥å£
| 彿°å¼æ¥å£ | 彿°æè¿°ç¬¦ | åå§ç±»åç¹å |
|:-----:|:--------|:-------|
| `Predicate` | `T->boolean` | `IntPredicate,LongPredicate, DoublePredicate` |
| `Consumer` | `T->void` | `IntConsumer,LongConsumer, DoubleConsumer` |
| `Function` | `T->R` | `IntFunction, IntToDoubleFunction,`
`IntToLongFunction, LongFunction,`
`LongToDoubleFunction, LongToIntFunction, `
`DoubleFunction, ToIntFunction, `
`ToDoubleFunction, ToLongFunction` |
| `Supplier` | `()->T` | `BooleanSupplier,IntSupplier, LongSupplier, DoubleSupplier` |
| `UnaryOperator` | `T->T` | `IntUnaryOperator, LongUnaryOperator, DoubleUnaryOperator` |
| `BinaryOperator` | `(T,T)->T` | `IntBinaryOperator, LongBinaryOperator, DoubleBinaryOperator` |
| `BiPredicate` | `(L,R)->boolean` | |
| `BiConsumer` | `(T,U)->void` | `ObjIntConsumer, ObjLongConsumer, ObjDoubleConsumer` |
| `BiFunction` | `(T,U)->R` | `ToIntBiFunction, ToLongBiFunction, ToDoubleBiFunction` |
## Lambdaså彿°å¼æ¥å£çä¾å
| ä½¿ç¨æ¡ä¾ | Lambda çä¾å | 对åºç彿°å¼æ¥å£ |
|:-----:|:--------|:-------|
| å¸å°è¡¨è¾¾å¼ | `(List list) -> list.isEmpty()` | `Predicate>` |
| å建对象 | `() -> new Project()` | `Supplier` |
| æ¶è´¹ä¸ä¸ªå¯¹è±¡ | `(Project p) -> System.out.println(p.getStars())` | `Consumer` |
| ä»ä¸ä¸ªå¯¹è±¡ä¸éæ©/æå | `(int a, int b) -> a * b` | `IntBinaryOperator` |
| æ¯è¾ä¸¤ä¸ªå¯¹è±¡ | `(Project p1, Project p2) -> p1.getStars().compareTo(p2.getStars())` | `Comparator æ BiFunction `Project, Integer> æ ToIntBiFunction` |
## æ¹æ³å¼ç¨
æ¹æ³å¼ç¨è®©ä½ å¯ä»¥éå¤ä½¿ç¨ç°æçæ¹æ³å®ä¹ï¼å¹¶åLambda䏿 ·ä¼ éå®ä»¬ã
## æ¬è课å°ç»
- lambda 表达å¼å¯ä»¥ç解为ä¸ç§å¿å彿°ï¼å®æ²¡æåç§°ï¼ä½æåæ°å表ã彿°ä¸»ä½ãè¿å ç±»åï¼å¯è½è¿æä¸ä¸ªå¯ä»¥æåºçå¼å¸¸çå表ã
- lambda 表达å¼è®©ä½ å¯ä»¥ç®æ´å°ä¼ é代ç ã
- 彿°å¼æ¥å£å°±æ¯ä»
ä»
声æäºä¸ä¸ªæ½è±¡æ¹æ³çæ¥å£ã
- åªæå¨æ¥å彿°å¼æ¥å£çå°æ¹æå¯ä»¥ä½¿ç¨ lambda 表达å¼ã
- lambda 表达å¼å
è®¸ä½ ç´æ¥å
èï¼ä¸ºå½æ°å¼æ¥å£çæ½è±¡æ¹æ³æä¾å®ç°ï¼å¹¶ä¸å°æ´ä¸ªè¡¨è¾¾å¼ä½ä¸ºå½æ°å¼æ¥å£çä¸ä¸ªå®ä¾ã
- Java 8èªå¸¦ä¸äºå¸¸ç¨ç彿°å¼æ¥å£ï¼æ¾å¨ `java.util.function` å
éï¼å
æ¬ `Predicate`ã`Function`ã`Supplier`ã`Consumer` å `BinaryOperator`ã
- Lambdaè¡¨è¾¾å¼æéè¦ä»£è¡¨çç±»åç§°ä¸ºç®æ ç±»åã
- æ¹æ³å¼ç¨è®©ä½ éå¤ä½¿ç¨ç°æçæ¹æ³å®ç°å¹¶ç´æ¥ä¼ éå®ä»¬ã
- `Comparator``ã`Predicate` å `Function` ç彿°å¼æ¥å£é½æå 个å¯ä»¥ç¨æ¥ç»å lambda 表达å¼çé»è®¤æ¹æ³ã