您好,登錄后才能下訂單哦!
1.為什么用lambda
簡化我們的操作
舉個例子
創建一個線程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hh");
}
}).start();
以前我們快速創建一個線程要這樣
現在用lambda
new Thread(()-> System.out.println("lambda-->hh")).start();
一個更重要的原因是Java 以后為了更好的函數式編程
2.lambda怎么用
2.1 lambda的使用場景
lambda只能用在函數式接口,函數式接口就是一個接口里面只有一個抽象方法
* @author Arthur van Hoff
* @see java.lang.Thread
* @see java.util.concurrent.Callable
* @since JDK1.0
*/
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface Runnable is used
* to create a thread, starting the thread causes the object's
* run method to be called in that separately executing
* thread.
*
* The general contract of the method run is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
可以通過@FunctionalInterface來表示是一個函數式接口
Java 為我們創建了很多常用的函數式接口,不用我們一個一個來創建
四大內置函數式接口
Consumer< T > 消費性 接口: void accept(T t);
Supplier< T > 供給型接口 : T get();
Function< T , R > 函數式接口 : R apply (T t);
Predicate< T > 斷言形接口 : boolean test(T t);
2.2 使用
(參數)->{方法體}
new Thread(()-> { System.out.println("lambda-->hh");}).start();
其實到這就可以熟練的用lambda,但是它還能簡化,你說氣不氣=。=
1.一個參數時可省略()
Consumer consumer = x -> System.out.println(x);
consumer.accept("1個參數省略()");
2.方法體只有一條語句省略{}
== 不管它是否需要有返回值==
Function function= x-> x;
Integer apply = function.apply(1);
System.out.println(apply);
3.類型推斷
lambda 表達式的參數類型可省略不寫
聰明的你肯定發現了為什么參數 不需要寫類型,為什么不需要,Java會根據泛型來推斷
你也可以指定參數的類型,但是沒必要
Consumer consumer = (String x) -> System.out.println(x);
3.方法引用
System.out.println("呼呦呦");
public void println(String x) {
synchronized (this) {
print(x);
newLine();
} 鄭州人流醫院哪家好 http://mobile.zhongyuan120.com/
}
println是一個參數沒有返回
這和Consumer 消費者接口很符合啊,下面這樣寫可不可以簡化啊(就nm事多)
Consumer consumer = x -> System.out.println(x);
簡化版
Consumer consumer1 = System.out::println;
方法引用 參數與返回值需要一致
/**
* 方法引用 如果lambda體中有方法已經實現,我們可以使用 方法引用 參數與返回值需要一致
*
* 主要有3種
* 對象::實例方法
* 類::靜態方法
* 類::實例方法
*
* 構造器引用
* 調用的構造方法與傳入的參數有關
*
* 數組引用
* Type[]:new;
*/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。