亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 中對具有特殊字符的整數進行排序

在 Java 中對具有特殊字符的整數進行排序

Qyouu 2023-05-24 15:00:58
我有一個問題,我需要按升序或降序對由連字符分隔的整數進行排序。我嘗試使用Collections.sort(list, Collections.reverseOrder());list創建的實例在哪里ArrayList,但它沒有給我確切的結果。arrayList 看起來像這樣:[91,95,96-1,94-2,94-1,100-2].預期的方式是:[91,94-1,94-2,95,96-1,100-2]
查看完整描述

1 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

對字符串使用默認排序將使用字典順序,而您打算按數字順序對字符串進行排序(如果第一個數字相等,則按第二個數字排序)。實現此目的的一種方法是使用兩個比較器:


List<String> list = new ArrayList<>(Arrays.asList("96-1","91","94-2","100-2","94-1","95"));

System.out.println("Unsorted: "+list);


Comparator<String> primaryComparator =

? (a,b)->Integer.valueOf(a.split("-")[0])

? ? ? ? ? .compareTo(Integer.valueOf(b.split("-")[0]));

Comparator<String> secondaryComparator =

? (a,b)->Integer.valueOf(a.split("-")[1])

? ? ? ? ? .compareTo(Integer.valueOf(b.split("-")[1]));

list.sort(primaryComparator.thenComparing(secondaryComparator));

System.out.println("Sorted: "+list);

list.sort(primaryComparator.thenComparing(secondaryComparator).reversed());

System.out.println("Sorted in reverse: "+list);

至于比較器本身,我假設列表中的字符串始終有效,并且始終采用 形式\d+(-\d+)?,因此要么是一個整數,要么是兩個用連字符分隔的整數。(如果不是這種情況,您可能需要使用自定義 Java 7 樣式比較器添加一些額外的檢查/驗證,以使其比 Java 8 樣式的 lambda 更具可讀性。)


/.split("-")[0]將.split("-")[1]在連字符上拆分此字符串,并根據比較器獲取第一個或最后一個整數。然后它會將其轉換為帶有 的整數Integer.valueOf(...),并將使用內置的默認整數進行比較Integer1.compareTo(Integer2)。


查看完整回答
反對 回復 2023-05-24
  • 1 回答
  • 0 關注
  • 202 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號