日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java8学习_java8学习

發(fā)布時(shí)間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java8学习_java8学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java8 Lambda表達(dá)式和Stream學(xué)習(xí)

lambda表達(dá)式和Stream是Java8的新特性,這次分享一下我在學(xué)習(xí)lambda表達(dá)式和Stream的收獲。

這是這次測(cè)試用的Entity:

public classpeople {privateString name;privateString sex;privateInteger age;

}

這是測(cè)試實(shí)體類(lèi)使用的數(shù)據(jù):

ArrayList list = new ArrayList<>();for(int i = 0;i < 10 ;i++){

people people2= newpeople();

people2.setName("-----樓下小黑");

people2.setSex("男");

people2.setAge(30-i);

list.add(people2);

}

下面是簡(jiǎn)單的使用lambda表達(dá)式對(duì)集合進(jìn)行的一個(gè)簡(jiǎn)單的排序。

p1和p2是對(duì)比的兩個(gè)people對(duì)象,使用對(duì)象的年齡字段來(lái)進(jìn)行排序,正序排列,年齡最小的排在集合的第一位。

list.sort((p1,p2) -> p1.getAge().compareTo(p2.getAge()));

還可以和java8中的stream配合使用來(lái)對(duì)集合進(jìn)行過(guò)濾操作,parallelStream也是流中的一個(gè)方法,并行流,將集合轉(zhuǎn)換成流之后,多線(xiàn)程來(lái)操作集合,代碼中還對(duì)集合進(jìn)行了過(guò)濾,年齡大于25歲people對(duì)象,并通過(guò)foreach輸出,labdam表達(dá)式foreach結(jié)構(gòu)跟普通的foreach循環(huán)結(jié)構(gòu)類(lèi)似,(parameters) -> expression 或者 (parameters) ->{ statements; }?,

操作時(shí),他會(huì)自動(dòng)判斷(parameters)的類(lèi)型,然后在 -> 來(lái)對(duì)當(dāng)前的people對(duì)象進(jìn)行操作,如果集合對(duì)象數(shù)據(jù)量大的話(huà),理論上可以提升效率,但是實(shí)際上如果數(shù)據(jù)量不大,還是循環(huán)迭代的效率更快,因?yàn)槎嗑€(xiàn)程的任務(wù)切換占用執(zhí)行的大部分時(shí)間,代碼如下:

list.parallelStream().filter(people -> people.getAge()>25).forEach(people -> System.out.println(people));

這段代碼輸出的對(duì)象是年齡大于25歲的 而如果不使用lambda表達(dá)式和Stream,我們肯定直接想到的就是For循環(huán)來(lái)完成這個(gè)判斷,但是Foreach循環(huán)是循環(huán)每一個(gè)對(duì)象然后取年齡來(lái)進(jìn)行判斷。而且For循環(huán)是封裝了迭代的語(yǔ)句塊,下面是使用iterator進(jìn)行迭代的循環(huán)。

Iterator iterator =list.iterator();

while(iterator.hasNext()){

people p2 =iterator.next();

if(p2.getAge()>25){

System.out.println(p2);

}

}

整個(gè)迭代過(guò)程是調(diào)用iterator返回一個(gè)泛型為people的迭代對(duì)象,來(lái)控制整個(gè)循環(huán)的流程,使用hasNext和next來(lái)完成迭代;

而java8的Stream是則是通過(guò)Stream方法來(lái)創(chuàng)建一個(gè)Stream對(duì)象,然后之后所有的操作都是針對(duì)于這個(gè)Stream對(duì)象,Stream操作的是無(wú)序的對(duì)象,其中還有parallelStream并行流,可以多線(xiàn)程來(lái)操作集合對(duì)象在一些集合數(shù)據(jù)多的情況下來(lái)提升效率,而針對(duì)Stream的所有操作都是在操作Stream,只有foreach獲取結(jié)果時(shí)才能操作結(jié)果,所以這種迭代方式稱(chēng)為內(nèi)部迭代。

lambda表達(dá)和Stream搭配使用,在某些情況下,可以使代碼變得更效率,更簡(jiǎn)潔。

Stream的學(xué)習(xí)

在前面的例子中,我們對(duì)通過(guò)Stream集合的操作可以分為三個(gè)步驟

獲得Stream對(duì)象,

Intermediate:通過(guò)一系列中間方法,對(duì)數(shù)據(jù)集進(jìn)行過(guò)濾,檢索等操作.可能有多次Intermediate操作,

Terminal:最終步驟,完成對(duì)結(jié)果的操作,如上面例子中的foreach操作中的打印。

Intermediate:

concat:

可以將兩個(gè)Stream連接在一起,如果是兩個(gè)泛型不同的Stream也可以合并,但是會(huì)返回一個(gè)Object的Stream對(duì)象:

Stream.concat(Stream.of("1","2"), list.parallelStream()).forEach((obj) -> System.out.println(obj));

控制臺(tái)輸出的是people對(duì)象的toString()方法和1,2。

map:

遍歷Stream,相當(dāng)于循環(huán)了,可以在遍歷每一個(gè)元素并且可以進(jìn)行操作,下面是將每一個(gè)peopel對(duì)象的年齡乘以2,并輸出:

list.stream().map(people -> {people.setAge(people.getAge()*2);return people;}).forEach(people -> System.out.println(people));

distinct:

去掉重復(fù)的元素,注意,這里去掉重復(fù)不是對(duì)象,而是根據(jù)內(nèi)存地址來(lái)判斷,如果你對(duì)象指向的棧或者堆中的地址是相同的,就會(huì)去掉重復(fù)的對(duì)象。

people people1 = new people("樓下小白", "女", 255);

list.add(people1);

list.add(people1);

list.stream().distinct().forEach(people-> System.out.println(people));

max:

可以找出Stream中某個(gè)可比值中最大的值。

Optional max = peopleStream.max((p1, p2) -> p1.getAge().compareTo(p2.getAge()));

min:則是將max換成min。

比較常用的就是這幾個(gè)方法了,其他還有一部分方法就不在這里一一寫(xiě)出了。

還有的是,因?yàn)閘ambda表達(dá)式的方法語(yǔ)句看起來(lái)很簡(jiǎn)單,所以變量名字如果可以盡寫(xiě)的剪短一點(diǎn),列入p1,p2這種,可以讓表達(dá)式變得更為簡(jiǎn)潔。

Terminal:

結(jié)束操作,將經(jīng)過(guò)中間操作的流結(jié)束,獲得經(jīng)過(guò)中間操作的結(jié)果,最常見(jiàn)的是跟隨本次java8一起的更新在集合接口的內(nèi)部迭代方法foreach方法。

總結(jié)

以上是生活随笔為你收集整理的java8学习_java8学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。