内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

好程序員分享java8新特性之Lambda表達式-創(chuàng)新互聯(lián)

好程序員分享java8新特性之Lambda表達式

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站制作、做網站、外貿營銷網站建設、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的海州網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

?、Lambda表達式簡介

什么是Lambda?

Lambda表達式是Java 8推出的?個新特性。從本質上講,Lambda表達式是?個匿名函數(shù)。

為什么要使?Lambda?

使?Lambda表達式可以對?個接?進??常簡潔的實現(xiàn)。

之前我們在給?個接?引?賦值的時候,可以使?接?實現(xiàn)類,或者匿名內部類。但是有了

Lambda表達式,我們可以更加?便的實現(xiàn)這個需求。

interface Comparator<T>?{

int compare(T o1, T o2);

}

class Program?{

public static void main(String[] args) {

// 1. 使?接?實現(xiàn)類實現(xiàn)

class Impl implements Comparator<Integer>?{

@Override

public int compare(Integer o1, Integer o2) {

return o1 - o2;

}

}

Comparator<Integer> c1 = new Impl();

// 2. 使?匿名內部類實現(xiàn)

Comparator<Integer> c2 = new Comparator<Integer>() {

@Override

public int compare(Integer o1, Integer o2) {

return o1 - o2;

}

};

// 3. 使?Lambda表達式實現(xiàn)

Comparator<Integer> c3 =?(o1, o2) -> o1 - o2;

}

}

從上述例?中,我們可以看到: 對同樣?個接?引?的實現(xiàn),Lambda最簡單!

Lambda對接?的要求?雖然Lambda表達式可以很便捷的實現(xiàn)接?,但并不是所有的接?都可以使?Lambda表達式來實現(xiàn)。

可以?Lambda表達式來簡潔實現(xiàn)的接?是有要求的。因為Lambda表達式本質上來講,就是?個匿名

函數(shù),?這個匿名函數(shù)來實現(xiàn)接?中的?法。所以,如果接?中有多個必須要實現(xiàn)抽象?法時,

Lambda表達式將?法是?。

注:Lambda表達式要求接?中只有?個必須要實現(xiàn)的抽象?法。但是JAVA 8對接?也有?個

拓展?,F(xiàn)在,我們可以在接?中,是?default來修飾?個?法,此時,這個?法需要有實

現(xiàn)。那么,實現(xiàn)類在實現(xiàn)接?的時候,對于default?法,可以實現(xiàn),也可以不實現(xiàn)。所以,

這?所說的接?中只有?個必須實現(xiàn)的抽象?法,與default?法?關。

@FunctionalInterface**

@FunctionalInterface

因為Lambda表達式要求接?中有且只能有?個必須實現(xiàn)的抽象?法,所以,對接?可以使?

@FunctionalInterface接?來進?限定。這個注解約束了接?中只能有?個必須實現(xiàn)的抽象?

法。使?這個注解修飾的接?,?叫做函數(shù)式接?。

?、Lambda表達式基礎語法

Lambda表達式,本質上就是?個匿名?法,所以離不開?法的?個必要的組成部分:返回值、?法

名、參數(shù)、?法體。但是由于他是?個匿名?法,所以?法名可以忽略。同時,Lambda中也不需要

顯式聲明返回值類型。所以,我們在寫Lambda表達式的時候,只需要關?參數(shù)和?法體即可。

參數(shù): 以()包圍起來,多個參數(shù)以逗號分隔

(int a, int b)

?法體: 以{}包圍起來

{ System.out.println("hello world"); }

->:?Lambda運算符,?來分隔參數(shù)和?法體

(int a, int b) -> {};

有了這?個組成部分,我們就可以對任意的函數(shù)式接?使?Lambda進?實現(xiàn)

// ?參、?返回值

() ->?{ System.out.println("hello world"); };

// int, int參數(shù)、?返回值

(int a, int b) ->?{ System.out.println(a + b); };

// int, int參數(shù)、int返回值

(int a, int b) ->?{ return a + b; };

三、Lambda表達式語法精簡

接?中定義的?法,已經聲明了?法的參數(shù)類型、數(shù)量和返回值類型。所以,使?Lambda表達式在

實現(xiàn)的時候,對應的部分可以省略參數(shù)精簡

  1. 參數(shù)的類型可以精簡

(int a, int b) -> { System.out.println(a + b); }

可以精簡為:

(a, b) -> { System.out.println(a + b); }

  1. 如果參數(shù)數(shù)量只有?個,?括號可以精簡

(int a) -> { System.out.println(a); }

可以精簡為:

a -> { System.out.println(a); }

?法體精簡

  1. 如果?法體中只有?條語句,則?括號可以省略

a -> { System.out.println(a); }

可以精簡為:

a -> System.out.println(a);

  1. 如果?法體中唯?的?條語句是返回值,在精簡掉?括號后,return也必須省略

a -> { return a * 2; }

可以精簡為:

a -> a * 2;

四、Lambda表達式語法進階之?法引?

什么是?法引?

如果在使?Lambda進?接?實現(xiàn)的時候,需要實現(xiàn)的邏輯已經在某?個?法中實現(xiàn),則可以直接使

??法引?,指向指定的?法。

interface Calculate?{

int calculate(int a, int b);

}

public class Program?{

public static void main(String[] args) {

// 接?引?

Calculate c =?(a, b) -> a + b;

}

public static int add(int a, int b) {

return a + b;

}

}在上述代碼中,main函數(shù)中Calculate引?c的實現(xiàn)部分,下?已經有?個?法 add 進?了實現(xiàn)。

所以此時,我們不需要再實現(xiàn)?次,只需要直接指向已經寫好的實現(xiàn)即可。所以,可以進?如下改

造:

Calculate c = Program::add;

上?的 Program::add 就是?個?法引?。引?了Program類中的?個靜態(tài)?法add。

在使??法引?的時候需要注意

  1. 引?的?法參數(shù)數(shù)量、參數(shù)類型、返回值類型必須和函數(shù)式接?中的?法定義?致。

  2. ?法引?必須有引?主體,即?法的?屬者。例如:上?的add?法是?個靜態(tài)?法,需要使?

類來調?。所以?法引?就是 類::?法,如果是?個成員?法,則需要使? 對象::?法 的

形式來引?。

構造?法的引?

如果需要引??個構造?法,需要使? 類::new 進?引?

interface CreatePerson?{

Person getPerson();

}

class Person?{}

class Program?{

public static void main(String[] args) {

CreatePerson c = Person::new;

}

}

五、Lambda表達式之綜合案例: 排序Comparator

// 排序

list.sort((o1, o2) -> o2.age - o1.age);

// 使?Lambda表達式來實現(xiàn)Comparator接?,并實例化?個TreeSet對象

TreeSet<Person> set = new TreeSet<>((o1, o2) ->?{

if?(o1.age >= o2.age) {

return -1;

}

else?{

return 1;

}

});

六、Lambda表達式之綜合案例: forEach()// 將集合中的每?個元素都帶?到?法accept中。

list.forEach(System.out::println);

// 輸出集合中所有的偶數(shù)

list.forEach(ele ->?{

if?(ele % 2 == 0) {

System.out.println(ele);

}

});

七、Lambda表達式之綜合案例: removeIf()

// 將集合中的每?個元素都帶?到test?法中, 如果返回值是true,則刪除這個元素

// 刪除集合中的年齡?于10歲的元素

list.removeIf(ele -> ele.age > 10);

?、Lambda表達式之綜合案例: 線程實例化

new Thread(() ->?{

for?(int i = 0; i < 100; i++) {

System.out.println(i);

}

}).start();

九、系統(tǒng)內置函數(shù)式接?

系統(tǒng)已經給我們提供了很多函數(shù)式接?,?便我們的使?。因此,如果我們需要?到以下?法的時

候,不需要再設計接?,直接使?指定的接?即可。函數(shù)式接?

數(shù)

返回值 特殊說明:?個特殊實現(xiàn)的?接?

Predicate T boolean

IntPredicate :參數(shù):int,返回值:boolean

LongPredicate :參數(shù):long,返回值:boolean

DoublePredicate :參數(shù):double,返回值:boolean

Consumer T void

IntConsumer :參數(shù):int,返回值:void LongConsumer :

參數(shù):int,返回值:void DoubleConsumer :參數(shù):int,返

回值:void

Function<T, R> T R

IntFunction<R> :參數(shù):int,返回值:R

IntToDoubleFunction :參數(shù):int,返回值:double

IntToLongFunction :參數(shù):int,返回值:long

LongFunction<R> :參數(shù):long,返回值:R

LongToDoubleFunction :參數(shù):long,返回值:double

LongToIntFunction :參數(shù):long,返回值:int

DoubleFunction<R> :參數(shù):double,返回值:R

DoubleToIntFunction :參數(shù):double,返回值:int

DoubleToLongFunction :參數(shù):double,返回值:long

Supplier ? T

BooleanSupplier :參數(shù):?,返回值:boolean

IntSupplier :參數(shù):?,返回值:int LongSupplier :參

數(shù):?,返回值:long DoubleSupplier :參數(shù):?,返回值:

double

UnaryOperator T T

IntUnaryOperator :參數(shù):int,返回值:int

LongUnaryOperator :參數(shù):long,返回值:long

DoubleUnaryOperator :參數(shù):double,返回值:double

BinaryOperator T,

T T

IntBinaryOperator :參數(shù):int, int,返回值:int

LongBinaryOperator :參數(shù):long, long,返回值:long

DoubleBinaryOperator :參數(shù):double, double,返回值:

double

BiPredicate<L,

R>

L,

R boolean

BiConsumer<T,

U>

T,

U void

BiFunction<T,

U, R>

T,

U R

上述接?中,最常?的是?Predicate、Consumer、

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。

網頁標題:好程序員分享java8新特性之Lambda表達式-創(chuàng)新互聯(lián)
文章出自:http://www.rwnh.cn/article4/cspiie.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、微信小程序網站內鏈、做網站營銷型網站建設、Google

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站建設
庄河市| 七台河市| 安图县| 明光市| 清涧县| 嵊州市| 旺苍县| 西昌市| 沿河| 呈贡县| 贵德县| 灌云县| 沽源县| 庆云县| 克拉玛依市| 密山市| 三明市| 丰顺县| 莱州市| 化州市| 济阳县| 当雄县| 加查县| 海淀区| 大连市| 阿巴嘎旗| 崇州市| 崇信县| 临沭县| 兴隆县| 泰州市| 自治县| 枣庄市| 萍乡市| 青州市| 保靖县| 蓝田县| 赣榆县| 平舆县| 澎湖县| 米脂县|