首先按长度排序数组,然后按字母顺序排序

时间:2010-08-04 19:12:46

标签: java arrays sorting

如何按长度排序数组,然后按字母顺序排序?

我有一个带有数字的东西列表,我目前正在:

Something1 Something10 Something2 Something3

我希望得到:

Something1 Something2 Something3 Something10

6 个答案:

答案 0 :(得分:24)

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());

答案 1 :(得分:8)

这是一个简洁的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));

答案 2 :(得分:4)

创建一个首先按长度进行比较的比较器,如果长度相同,则使用String.compareTo()。

答案 3 :(得分:1)

首先按长度排序,然后词法排序仅在字符串前缀(即数字前面的部分)在所有情况下都是相同的长度时才起作用。我相信你可能真的想要写一个比较器来分隔字符串和数字部分,并按字母顺序对字符串进行排序,并在数字部分按字母顺序排序。

答案 4 :(得分:1)

通过使用 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);

    }
}

答案 5 :(得分:0)

定义一个类来保存你的项目。好像你希望它成为一个字符串。

对于该类,您需要定义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);
   }
}

免责声明,我实际上没有测试过这段代码,但它应该接近你想要的。