一刁品、什么是lambda表達(dá)式辱姨?
“Lambda 表達(dá)式”(lambda expression)是一個匿名函數(shù)誊酌,Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名。通過lambda表達(dá)式我們可以將一個A函數(shù)傳入另B函數(shù),從而讓B函數(shù)執(zhí)行A函數(shù)的內(nèi)容察绷,實現(xiàn)函數(shù)式編程干签。
二津辩、Java中如何使用lambda表達(dá)式
2.1 lambda表達(dá)式的形式
(函數(shù)參數(shù)列表)->{ 函數(shù)定義 }
例子:(a,b)->{a+b}拆撼;
同時還有其它規(guī)則:
1.如果參數(shù)列表只有一個可以省略括號()
2.如果函數(shù)定義里面只有一個表達(dá)式容劳,Java會默認(rèn)把該表達(dá)式的計算結(jié)果作為函數(shù)返回值,可以不添加return語句闸度。
2.2 使用lambda表達(dá)式
/* 過濾一個目錄里面的文件*/
File mydir = new File("d:\\dir");
// 普通寫法
FileFilter filter = new FileFilter(){
@Override
public blooean accept(File file){
if(file.getName().length()>6)
return trure;
return false;
}
}
File myfiles[] = mydir.listFiles(filter);
// lambda表達(dá)式寫法
File lmyfiles[] = mydir.listFiles(file -> {
if(file.getName().length()>6){
return true;
return false;
});
/* 很簡潔有沒有*/
2.3 使用lambda表達(dá)式的前提
既然lambda表達(dá)式很優(yōu)秀竭贩,那么是不是可以隨便用呢?當(dāng)然不是的莺禁,使用lambda表達(dá)式還是得有一些要求和限制留量。我們以上面的例子來講一講。首先哟冬,看看FileFilter類的源碼以及l(fā)istFile方法的定義:
@FunctionalInterface
public interface FileFilter {
/**
* Tests whether or not the specified abstract pathname should be
* included in a pathname list.
*
* @param pathname The abstract pathname to be tested
* @return <code>true</code> if and only if <code>pathname</code>
* should be included
*/
boolean accept(File pathname);
}
/* listFiles方法定義 */
public File[] listFiles(FileFilter filter);
從上面我們就不難理解下面的結(jié)論:
(1)lamda表達(dá)式表示匿名函數(shù)時要和一個接口里面的函數(shù)對應(yīng)(參數(shù)一致楼熄,返回類型一致)
(2)同時,該接口有且只能包含一個抽象函數(shù)的定義浩峡。
三可岂、lambda表達(dá)式高級使用探索
未完待續(xù)。翰灾。缕粹。