一行就夠了!帶你寫出語不驚人誓不休的lambda...
序:近日在某大型同性交友群裝逼,貼了下自己的程式碼。並立下豪言,要寫篇文章傳授群友java lambda精髓。冷靜後仔細想來,所謂碼如其人,自己程式碼好看不過是因為自己長得好看而已,並沒有什麼精髓成份。又好面子,不好拒絕。一番思想爭鬥,懷沉重心情寫下此文。
lambda語法
型別為介面,有且只有一個需要實現的方法,就可以使用一個表示式作為該介面的實現
看懂lambda
java lambda有能力表達一個完整的方法簽名(帶返回值),但在開發中總是寫全lambda並不能達到簡化程式碼的效果,因此開發中我們更願意使用lambda簡化後的寫法。
package com.karmic.lambda;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* @author karmic
*/
public class LambdaDemo {
public static void main(String[] args) {
//lambda完全體
Function<String, Integer> f1 = (Function<String, Integer>) (String s) -> Integer.parseInt(s);
//簡化返回型別
Function<String, Integer> f2 = (String s) -> Integer.parseInt(s);
//簡化入參型別
Function<String, Integer> f3 = (s) -> Integer.parseInt(s);
//單入參省略入參()
Function<String, Integer> f4 = s -> Integer.parseInt(s);
//表示式呼叫的方法 簽名和返回值與介面一致時 使用::簡化表示式
Function<String, Integer> f5 = Integer::parseInt;
//類::靜態方法 或 物件::物件方法 可以轉換成簽名相同的方法
Supplier<String> a1 = DemoBean::getA;
Supplier<String> a2 = new DemoBean()::getB;
//類::物件方法 可以轉換成簽名第一個入參為類物件,其餘簽名一致的介面
Function<DemoBean, String> bf = DemoBean::getB;
}
static class DemoBean {
public static String getA() {
return "A";
}
public String getB() {
return "B";
}
}
}
lambda開發中常見的應用
優雅的繞過NullPointException
package com.karmic.lambda;
import java.util.Optional;
/**
* @author karmic
*/
public class NullExceptionAvoid {
public static void main(String[] args) {
A a = new A(new B(null));
String s = Optional.of(a).map(A::getB).map(B::getC).map(C::getS).orElse(null);
System.out.println(s);
}
static class A {
B b;
public A(B b) {
this.b = b;
}
public B getB() {
return b;
}
}
static class B {
C c;
public B(C c) {
this.c = c;
}
public C getC() {
return c;
}
}
static class C {
String s;
public C(String s) {
this.s = s;
}
public String getS() {
return s;
}
}
}
放棄程式碼執行控制權
// Create bean instance.
if (mbd.isSingleton()) {
sharedInstance = getSingleton(beanName, () -> {
try {
// Spring原始碼,createBean方法是否執行的控制權,由getSingleton控制 判斷bean是否已經建立過,再決定是否呼叫createBean方法
return createBean(beanName, mbd, args);
}
catch (BeansException ex) {
// Explicitly remove instance from singleton cache: It might have been put there
// eagerly by the creation process, to allow for circular reference resolution.
// Also remove any beans that received a temporary reference to the bean.
destroySingleton(beanName);
throw ex;
}
});
bean = getObjectForBeanInstance(sharedInstance, name, beanName, mbd);
}
MR式資料處理
package com.karmic.lambda;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author karmic
*/
public class StreamWordCountDemo {
public static void main(String[] args) {
@SuppressWarnings("serial")
List<String> list = new ArrayList<String>() {
{
add("hello world");
add("hello java");
add("hello python");
add("hello kotlin");
}
};
Map<String, Long> map = list.stream().map(s -> s.split(" "))
.flatMap(Arrays::stream)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(map);
}
}
相關文章
- Excel不夠用?Smartbi的Excel融合分析帶你飛Excel
- TCP 看我就夠了TCP
- 手寫Promise看著一篇就足夠了Promise
- python語法進階這一篇就夠了Python
- 這一篇就夠啦,帶你瞭解MySQL的常用技巧MySql
- SpringBoot寫後端介面,看這一篇就夠了!Spring Boot後端
- 閉包,看這一篇就夠了——帶你看透閉包的本質,百發百中
- Android 12 正式釋出!都帶來了哪些驚喜?Android
- 學Mybatis,入門看這一篇就夠你學的了!MyBatis
- MySQL,你只需看這一篇文章就夠了!MySql
- Mongodb叢集搭建一篇就夠了-複製集、分片、帶認證、不帶認證等(帶詳細步驟說明)MongoDB
- spring 掌握這些就夠了Spring
- springmvc知道這些就夠了SpringMVC
- 學Redis這篇就夠了Redis
- mongoDB看這篇就夠了MongoDB
- 別參加培訓了,打造個人IP看這篇文章就夠了
- 2020 還不會泡 Github 你就落伍了Github
- 面試時寫不出排序演算法?看這篇就夠了。面試排序演算法
- 面試時寫不出排序演算法?看這篇就夠了面試排序演算法
- 別瞎寫工具類了,Spring自帶的不香嗎?Spring
- Cocos Creator iOS 互相呼叫看我的就夠了iOS
- 跨域了? 裝個外掛就夠了!跨域
- Ubuntu搭建Pytorch,就這一篇就夠了UbuntuPyTorch
- 別騙自己了,真有了足夠的時間,你也不會積極向上。
- 不瞭解JavaWeb,你就錯億了,不信,你進來看JavaWeb
- Android Fragment看這篇就夠了AndroidFragment
- 想熟悉PostgreSQL?這篇就夠了SQL
- HttpServletRequest,看這篇文章就夠了HTTPServlet
- Oracle索引,看這篇就夠了Oracle索引
- Ajax原理一篇就夠了
- HTML教程(看完這篇就夠了)HTML
- 面試大廠,手寫程式碼這些就夠了,附 codepen 地址!面試
- 帶你瞭解 MySQL Binlog 不為人知的祕密MySql
- 關於javascript的Object. hasOwnProperty,看我就夠了JavaScriptObject
- HashMap的實現原理(看這篇就夠了)HashMap
- Volatile的實現原理(看這篇就夠了)
- 關於Python的一切:2018年,你讀這8本書就夠了Python
- 不會做精益生產專案?看這一篇就夠了