第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在未知值之前對(duì)具有已知值的列表進(jìn)行排序

在未知值之前對(duì)具有已知值的列表進(jìn)行排序

慕慕森 2021-05-31 15:06:02
我正在嘗試使用以下規(guī)則對(duì)列表進(jìn)行排序:已知值應(yīng)排在未知值之前。已知值應(yīng)按單獨(dú)定義的鍵排序。未知值應(yīng)按其自然順序排序。我有 (1) 和 (2),只是在努力將 (3) 添加到組合中。到目前為止,我有這個(gè):List<String> values = Arrays.asList(    "red", "orange", "yellow", "green", "blue", "indigo", "violet");ImmutableMap<String, Integer> map = ImmutableMap.of("red", 1, "green", 2, "blue", 3);Ordering<String> order = Ordering.natural()    .nullsLast()    .onResultOf(Functions.forMap(map, null));Collections.sort(values, order);System.out.println(values);其中產(chǎn)生:[red, green, blue, orange, yellow, indigo, violet]但是最后 4 個(gè)是按原始順序排列的,而我希望它們按自然順序排序:[red, green, blue, indigo, orange, violet, yellow]我唯一能想到的是編寫我自己的自定義函數(shù),它在地圖中查找內(nèi)容并將地圖結(jié)果添加到原始值,如果未找到則使用地圖大小 - 例如它會(huì)返回:"1-red", "4-orange", "4-yellow", "2-green", "3-blue", "4-indigo", "4-violet"但這僅在映射值是整數(shù)時(shí)才有效,并且需要數(shù)字格式以在“10”之前排序“02”等。任何人都有更好的方法來實(shí)現(xiàn)這一目標(biāo)?
查看完整描述

2 回答

?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

這是 Guava 版本(當(dāng)您使用 Java 7 或更低版本時(shí)):


Ordering<String> ordering = Ordering.natural().nullsLast()

        .onResultOf(Functions.forMap(map, null))

        .compound(Ordering.natural());

這是使用 pure 的非 Guava 版本Comparator(在 JDK 8+ 上時(shí)):


Comparator<String> comparator = Comparator

        .<String, Integer>comparing(map::get, Comparator.nullsLast(Comparator.naturalOrder()))

        .thenComparing(Comparator.naturalOrder());

附注。如您所見,Guava API 的類型推斷更好(無需指定顯式類型參數(shù))。


查看完整回答
反對(duì) 回復(fù) 2021-06-02
  • 2 回答
  • 0 關(guān)注
  • 133 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)