簡體   English   中英

在Java中首先按長度然后按字母順序對數組進行排序

[英]Sort array first by length then alphabetically in Java

如何首先按長度對數組進行排序,然后按字母順序排序?

我有一個帶有數字的東西清單,我目前得到:

某物1 某物10 某物2 某物3

而我想得到:

某物1 某物2 某物3 某物10

public class MyComparator implements Comparator<String>{
    @Override
    public int compare(String o1, String o2) {  
      if (o1.length() > o2.length()) {
         return 1;
      } else if (o1.length() < o2.length()) {
         return -1;
      }
      return o1.compareTo(o2);
    }
}

然后使用:

Collections.sort(yourList, new MyComparator());

這是一個簡潔的 Java 8 解決方案:

List<String> list = Arrays.asList("Something1", "Something10", "Something2", "Something3");
list.sort(Comparator.comparing(String::length).thenComparing(String::compareTo));

或者,不區分大小寫的版本:

list.sort(Comparator.comparing(String::length).thenComparing(String::compareToIgnoreCase));

創建一個 Comparator,首先按長度進行比較,如果長度相同,則使用 String.compareTo()。

僅當字符串前綴(即數字之前的部分)在所有情況下長度相同時,首先按長度排序,然后按詞法排序才有效。 我相信您可能真的想編寫一個比較器來分隔字符串和數字部分,並在字符串上按字母順序排序,在數字部分上按數字排序。

通過使用 lambda,java 程序看起來像。

import java.util.Arrays;
import java.util.List;

public class Test1 {

    public static void main(String[] args) {
        
        String str = "This is am example";
        List<String> strl = Arrays.asList(str.split(" "));
        strl.sort( (o1,o2)->{
            if(o1.length() > o2.length())      return 1;
            else if(o1.length() < o2.length()) return -1;
            else                               return o1.compareTo(o2);
        });
        System.out.println(strl);

    }
}

定義一個類來保存您的項目。似乎您希望它是一個字符串。

對於該類,您需要定義 Comparable 接口並將要比較的邏輯放在其抽象方法中。

int compareTo(T o)

例如:

class MyString extends String
{
  @Override
  int compareTo(Object obj)
  {
    // put your logic in here. 
    // Return -1 if this is "less than" obj. 
    // Return 0 if this is equal to obj
    // Return 1 if this is "greater than" obj.

    // Test length first
    if (length() < obj.length())
      return -1;
    if (length() > obj.length())
      return 1;

    // Lengths are the same, use the alphabetical compare defined by String already
    return super.compareTo(obj);
   }
}

免責聲明,我實際上並沒有測試這段代碼,但它應該接近你想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM