激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java8 Lambda表達(dá)式詳解及實(shí)例

Java8 Lambda表達(dá)式詳解及實(shí)例

2020-06-18 11:14lqh JAVA教程

這篇文章主要介紹了Java8 Lambda表達(dá)式詳解的相關(guān)資料,需要的朋友可以參考下

第一個(gè)Lambda表達(dá)式

在Lambda出現(xiàn)之前,如果我們需要寫(xiě)一個(gè)多線(xiàn)程可能需要下面這種方式:

?
1
2
3
4
5
6
7
8
Runnable runnable = new Runnable() {
      @Override
      public void run() {
        System.out.println("Hello runnable");
      }
    };
    ...
 thread.start();

上面的例子如果改成使用Lambda就會(huì)簡(jiǎn)單許多:

?
1
2
3
Runnable noArgs = ()->System.out.println("Hello Lambda!~");
...
 thread.start();

Lambda表達(dá)式是一個(gè)匿名函數(shù),將行為像數(shù)據(jù)一樣傳遞,表達(dá)式使用 -> 將參數(shù)和主體分開(kāi), -> 前面是參數(shù)部分,后面這是主體部分。

Lambda的其它形式

?
1
2
3
4
5
6
7
BinaryOperator<Long> add = (x,y)->x+y;
 //OR
 BinaryOperator<Long> add = (Long x,Long y)->x+y;
 //OR
 BinaryOperator<Long> add = (Long x,Long y)->{
  x+y;
 };
  1. Lambda表達(dá)式使用 () 表示沒(méi)有參數(shù)。
  2. 如果Lambda表達(dá)式中只包含一個(gè)參數(shù),可省略掉 () 。
  3. 如果Lambda表達(dá)式的主題是一段代碼塊,需要使用 {} ,該代碼塊與普通的Java代碼塊并無(wú)區(qū)別,也可以返回或拋出異常。
  4. 如果參數(shù)的類(lèi)型可以由編譯器推斷得出可以省略參數(shù)類(lèi)型,當(dāng)然你也可以加上。

以上就是Lambda表達(dá)式的所有形式了。

那么問(wèn)題來(lái)了:

BinaryOperator<Long> add = (Long x,Long y)->x+y; 是個(gè)什么意思?

這行代碼并不是講個(gè)數(shù)字相加,而是創(chuàng)建了一個(gè)函數(shù),用來(lái)計(jì)算兩個(gè)數(shù)字相加的結(jié)果。而add的類(lèi)型是 BinaryOperator<Long> ,它也不是兩個(gè)數(shù)字的和,而是將兩個(gè)數(shù)字相加的那段代碼。下面的例子展示如何使用這個(gè)變量:

?
1
2
3
BinaryOperator<Long> add = (Long x,Long y)->x+y;
 Long res = add.apply(3L, 4L);
 System.out.println("res="+res);//輸出:res=7

函數(shù)接口

函數(shù)接口是只有一個(gè)抽象方法的接口,用作Lambda表達(dá)式的類(lèi)型。

如 Runnable 就是一個(gè)函數(shù)接口。

新建一個(gè)我們自己的函數(shù)接口:

?
1
2
3
public interface AddOperator<T,D> {
  long add(T one,D two);
}

使用:

?
1
2
AddOperator<Long,Long> addOperator = ( x, y)->x +y;
 System.err.println("Custom function listener res= "+addOperator.add(34L, 65L));

目標(biāo)類(lèi)型

目標(biāo)類(lèi)型是指Lambda表達(dá)式所在上下文環(huán)境的類(lèi)型。比如,將Lambda表達(dá)式賦值給一個(gè)局部變量,或傳遞給一個(gè)方法作為參數(shù),局部變量或方法參數(shù)的類(lèi)型就是Lambda表達(dá)式的目標(biāo)類(lèi)型。

final

       如果我們?cè)谀涿麅?nèi)部類(lèi)中引用了所在方法中的局部變量,這是需要局部變量是 final 的。

在Lambda中我們不需要將引用的外部局部變量聲明為 final 的,但是該變量只能被賦值一次。

下面的例子中如果我們?nèi)サ糇⑨專(zhuān)瑢?duì)name再次賦值,則無(wú)法通過(guò)編譯,并顯示出錯(cuò)信息: local variables referenced from a Lambda expression must be final or effectively final.

Lambda表達(dá)式引用的局部變量必須是final或即成事實(shí)的final。

?
1
2
3
String name = getUserName();
//name="hi";
button.addActionListener(event->System.out.println("name="+name));

類(lèi)型推斷

Lambda表達(dá)式的類(lèi)型推斷是Java7中就引入的目標(biāo)類(lèi)型推斷的擴(kuò)展。

java7中的類(lèi)型推斷:

List<String> list= new ArrayList<>();

上例中我們并沒(méi)有指定ArrayList的范型類(lèi)型,而是根據(jù)list的類(lèi)型,推斷出了ArrayList的范性類(lèi)型。

如: AddOperator<Long,Long> addOperator = ( x, y)->x +y;

通過(guò)此文,希望能幫助到大家,學(xué)習(xí)理解,此部分知識(shí),謝謝大家對(duì)本站的支持! 

原文鏈接:http://www.jianshu.com/p/49b751742ffc

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品一区二区三区在线播放 | 91久久久国产精品 | 国产午夜精品久久久久久免费视 | 偷偷操偷偷操 | 欧美日韩成人一区二区 | 国av在线| 久久国产综合精品 | 久久99国产精品视频 | 日本一区二区免费在线播放 | 久久人体 | 欧美另类69xxxxx 视频 | 草草视频在线播放 | 欧美成人se01短视频在线看 | 伊人欧美视频 | 久久夜色精品 | 色女人在线 | 欧美成人高清视频 | 理论片中文字幕 | 国产毛片在线 | 欧洲精品久久久久69精品 | 欧美性受xxxx白人性爽 | 牛牛碰在线视频 | 亚洲va久久久噜噜噜久久男同 | 久久丝袜脚交足黄网站免费 | 国产精品久久久久久久久久三级 | 国产精品久久久久久久久久三级 | 伊人yinren22综合网色 | 91精品久久久久久久久 | 成人黄色免费电影 | 成人短视频在线观看 | 精品久久久久久久久久久久久久久久久久久 | 伦理三区| 一区二区三区在线播放视频 | 日日草夜夜 | 久久99精品久久久久久国产越南 | 看一级大毛片 | 欧美成在人线a免费 | 黄色av网站免费看 | 一级片在线 | 麻豆传传媒久久久爱 | 毛片在线播放视频 |