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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Google Guava] 排序: Guava强大的”流畅风格比较器”

發布時間:2025/3/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Google Guava] 排序: Guava强大的”流畅风格比较器” 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接?譯者: 沈義揚

排序器[Ordering]是Guava流暢風格比較器[Comparator]的實現,它可以用來為構建復雜的比較器,以完成集合排序的功能。

從實現上說,Ordering實例就是一個特殊的Comparator實例。Ordering把很多基于Comparator的靜態方法(如Collections.max)包裝為自己的實例方法(非靜態方法),并且提供了鏈式調用方法,來定制和增強現有的比較器。

?

創建排序器:常見的排序器可以由下面的靜態方法創建

方法描述
natural()對可排序類型做自然排序,如數字按大小,日期按先后排序
usingToString()按對象的字符串形式做字典排序[lexicographical ordering]
from(Comparator)把給定的Comparator轉化為排序器

實現自定義的排序器時,除了用上面的from方法,也可以跳過實現Comparator,而直接繼承Ordering:

1Ordering<String> byLengthOrdering =?new?Ordering<String>() {
2??public?int?compare(String left, String right) {
3????return?Ints.compare(left.length(), right.length());
4??}
5};

鏈式調用方法:通過鏈式調用,可以由給定的排序器衍生出其它排序器

方法描述
reverse()獲取語義相反的排序器
nullsFirst()使用當前排序器,但額外把null值排到最前面。
nullsLast()使用當前排序器,但額外把null值排到最后面。
compound(Comparator)合成另一個比較器,以處理當前排序器中的相等情況。
lexicographical()基于處理類型T的排序器,返回該類型的可迭代對象Iterable<T>的排序器。
onResultOf(Function)對集合中元素調用Function,再按返回值用當前排序器排序。

例如,你需要下面這個類的排序器。

1class?Foo {
2????@Nullable?String sortedBy;
3????int?notSortedBy;
4}

考慮到排序器應該能處理sortedBy為null的情況,我們可以使用下面的鏈式調用來合成排序器:

1Ordering<Foo> ordering = Ordering.natural().nullsFirst().onResultOf(newFunction<Foo, String>() {
2??public?String apply(Foo foo) {
3????return?foo.sortedBy;
4??}
5});

當閱讀鏈式調用產生的排序器時,應該從后往前讀。上面的例子中,排序器首先調用apply方法獲取sortedBy值,并把sortedBy為null的元素都放到最前面,然后把剩下的元素按sortedBy進行自然排序。之所以要從后往前讀,是因為每次鏈式調用都是用后面的方法包裝了前面的排序器。

注:用compound方法包裝排序器時,就不應遵循從后往前讀的原則。為了避免理解上的混亂,請不要把compound寫在一長串鏈式調用的中間,你可以另起一行,在鏈中最先或最后調用compound。

超過一定長度的鏈式調用,也可能會帶來閱讀和理解上的難度。我們建議按下面的代碼這樣,在一個鏈中最多使用三個方法。此外,你也可以把Function分離成中間對象,讓鏈式調用更簡潔緊湊。

1Ordering<Foo> ordering = Ordering.natural().nullsFirst().onResultOf(sortKeyFunction)

運用排序器:Guava的排序器實現有若干操縱集合或元素值的方法

方法描述另請參見
greatestOf(Iterable iterable, int k)獲取可迭代對象中最大的k個元素。leastOf
isOrdered(Iterable)判斷可迭代對象是否已按排序器排序:允許有排序值相等的元素。isStrictlyOrdered
sortedCopy(Iterable)判斷可迭代對象是否已嚴格按排序器排序:不允許排序值相等的元素。immutableSortedCopy
min(E, E)返回兩個參數中最小的那個。如果相等,則返回第一個參數。max(E, E)
min(E, E, E, E...)返回多個參數中最小的那個。如果有超過一個參數都最小,則返回第一個最小的參數。max(E, E, E, E...)
min(Iterable)返回迭代器中最小的元素。如果可迭代對象中沒有元素,則拋出NoSuchElementException。max(Iterable),?min(Iterator),?max(Iterator)

原創文章,轉載請注明:?轉載自并發編程網 – ifeve.com本文鏈接地址:?[Google Guava] 排序: Guava強大的”流暢風格比較器”

from:?http://ifeve.com/google-guava-ordering/?

總結

以上是生活随笔為你收集整理的[Google Guava] 排序: Guava强大的”流畅风格比较器”的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜视频1000 | 69色 | 日韩一级欧美 | 少妇精品久久久一区二区三区 | 丰满少妇一区二区 | 午夜激情在线观看视频 | 窝窝视频在线观看 | 亚洲欧美激情在线观看 | mm131亚洲精品| 欧亚一区二区三区 | 四虎毛片 | 久久精品视频在线观看 | av片观看 | www夜插内射视频网站 | 午夜剧场免费观看 | 欧美a级黄色片 | 天堂资源中文在线 | 欧美做爰性生交视频 | 九九久久国产精品 | 四虎成人精品永久免费av | 精品乱子伦一区二区三区 | 亚洲国产精品一区二区尤物区 | 成熟丰满熟妇高潮xxxxx视频 | 奇米影视播放器 | 精品无码国产一区二区三区av | 国产内谢 | 国产高清视频免费在线观看 | 亚洲午夜视频在线 | 屁屁影院一区二区三区 | 黑人vs日本人ⅹxxxhd | 国产在线视频卡一卡二 | 大尺度床戏揉捏胸视频 | 中国一级大黄大黄大色毛片 | 长河落日电视连续剧免费观看 | 欧美日韩黄色一区二区 | 日韩黄色免费看 | 青青草国产成人99久久 | 亚洲人久久 | 免费看裸体视频网站 | 中国亚洲老头同性gay男男… | 欧美老女人视频 | a级片日本 | 岛国一区二区三区 | avtt2015 | 午夜在线一区二区 | 欧美高清久久 | 久久精品国产一区二区 | 欧美亚洲国产成人 | 亚洲日本天堂 | 日韩黄色一级 | 亚洲欧美日韩在线播放 | 色涩网站 | 婷婷精品视频 | 欧美天堂视频 | 免费一区二区三区四区 | 亚洲精品6 | 秋霞啪啪片| 日韩毛毛片 | 好姑娘在线观看高清完整版电影 | 亚洲精品乱码久久久久久不卡 | 日韩美女少妇 | 91精品国产综合久久香蕉922 | 日韩一区二区三区在线播放 | 天堂资源 | 欧美一级视频在线观看 | 国产黄色精品视频 | 国产在线观看www | 一区二区三区在线视频观看 | 亚洲韩国精品 | 高清欧美精品xxxxx在线看 | 国产嫩草影院久久久 | 男人午夜av | 久久国产加勒比精品无码 | 在线观看91视频 | 国产草逼视频 | 五月激情小说 | 日韩精品视频三区 | 熟女少妇内射日韩亚洲 | 牛牛精品一区二区 | 亚洲同性gay激情无套 | 国产精品乱码久久久久久久久 | 涩涩屋视频 | 樱花电影最新免费观看国语版 | 韩国午夜影院 | 一级大片免费看 | av男人的天堂在线 | v片在线看 | 欧美一区二区三区国产 | 激情 小说 亚洲 图片 伦 | 6680新视觉电影免费观看 | 九九精品在线视频 | 69日影院| 亚洲一区二区三区四区五区xx | 亚洲高清av | 波多野在线播放 | 美女一区二区视频 | 日本乳汁视频 | 精品久久久免费 | 日韩性生活视频 |