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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java布尔类型比较器_Java 8比较器类型推论非常困惑

發(fā)布時(shí)間:2024/9/19 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java布尔类型比较器_Java 8比较器类型推论非常困惑 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我一直在研究Collections.sort和之間的區(qū)別list.sort,特別是在使用Comparator靜態(tài)方法以及l(fā)ambda表達(dá)式中是否需要參數(shù)類型方面。在開(kāi)始之前,我知道我可以使用方法引用,例如Song::getTitle來(lái)解決我的問(wèn)題,但是這里的查詢并不是我想要修復(fù)的東西,而是我想要答案的東西,即Java編譯器為什么以這種方式處理它。

這些是我的發(fā)現(xiàn)。假設(shè)我們有一個(gè)ArrayListtype Song,添加了一些歌曲,有3種標(biāo)準(zhǔn)的get方法:

ArrayList playlist1 = new ArrayList();

//add some new Song objects

playlist.addSong( new Song("Only Girl (In The World)", 235, "Rhianna") );

playlist.addSong( new Song("Thinking of Me", 206, "Olly Murs") );

playlist.addSong( new Song("Raise Your Glass", 202,"P!nk") );

這是對(duì)兩種有效的排序方法的調(diào)用,沒(méi)問(wèn)題:

Collections.sort(playlist1,

Comparator.comparing(p1 -> p1.getTitle()));

playlist1.sort(

Comparator.comparing(p1 -> p1.getTitle()));

一旦開(kāi)始鏈接thenComparing,就會(huì)發(fā)生以下情況:

Collections.sort(playlist1,

Comparator.comparing(p1 -> p1.getTitle())

.thenComparing(p1 -> p1.getDuration())

.thenComparing(p1 -> p1.getArtist())

);

playlist1.sort(

Comparator.comparing(p1 -> p1.getTitle())

.thenComparing(p1 -> p1.getDuration())

.thenComparing(p1 -> p1.getArtist())

);

即語(yǔ)法錯(cuò)誤,因?yàn)樗辉僦李愋蚿1。因此,要解決此問(wèn)題,我將類型添加Song到(比較)的第一個(gè)參數(shù)中:

現(xiàn)在是混淆部分。對(duì)于p laylist1.sort,即List,這可以解決以下兩個(gè)thenComparing調(diào)用的所有編譯錯(cuò)誤。但是,對(duì)于Collections.sort,它將為第一個(gè)解決,而不是最后一個(gè)。我測(cè)試過(guò)添加了一些額外的調(diào)用thenComparing,除非我(Song p1)輸入了參數(shù),否則它總是顯示最后一個(gè)錯(cuò)誤。

與中發(fā)生的情況相同,對(duì)于TreeSet,沒(méi)有編譯錯(cuò)誤,但Objects.compare最后一次調(diào)用thenComparing顯示錯(cuò)誤。

任何人都可以解釋一下為什么會(huì)發(fā)生這種情況,也可以解釋為什么(Song p1)在簡(jiǎn)單地調(diào)用比較方法時(shí)根本不需要使用(無(wú)需進(jìn)一步thenComparing調(diào)用)。

關(guān)于同一主題的另一個(gè)查詢是我對(duì)以下內(nèi)容進(jìn)行查詢時(shí)TreeSet:

Set set = new TreeSet(

Comparator.comparing(p1 -> p1.getTitle())

.thenComparing(p1 -> p1.getDuration())

.thenComparing(p1 -> p1.getArtist())

);

例如,Song從用于比較方法調(diào)用的第一個(gè)lambda參數(shù)中刪除類型,它顯示在進(jìn)行比較的調(diào)用和對(duì)的第一個(gè)調(diào)用(thenComparing但對(duì)最終調(diào)用沒(méi)有)下的語(yǔ)法錯(cuò)誤thenComparing-幾乎與上述情況相反!然而,所有其他3個(gè)例子,即有Objects.compare,List.sort而且Collections.sort當(dāng)我刪除第一個(gè)Song參數(shù)類型它顯示語(yǔ)法錯(cuò)誤的所有電話。

提前謝謝了。

經(jīng)過(guò)編輯后包含了我在Eclipse Kepler SR2中收到的錯(cuò)誤的屏幕截圖,此后我現(xiàn)在發(fā)現(xiàn)它們是特定于Eclipse的,因?yàn)樵诿钚猩鲜褂肑DK8 java編譯器進(jìn)行編譯時(shí),它可以編譯。

總結(jié)

以上是生活随笔為你收集整理的java布尔类型比较器_Java 8比较器类型推论非常困惑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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