如何按照长度,然后按字母顺序对数组进行排序?
我有一个带有数字的事物列表,我目前得到的结果是:
Something1 Something10 Something2 Something3
而我想要得到的是:
Something1 Something2 Something3 Something10
如何按照长度,然后按字母顺序对数组进行排序?
我有一个带有数字的事物列表,我目前得到的结果是:
Something1 Something10 Something2 Something3
而我想要得到的是:
Something1 Something2 Something3 Something10
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));
compareToIgnoreCase()
方法。 - Mark Peters定义一个类来保存你的项目。看起来你想让它成为一个字符串。
对于那个类,你需要定义 Comparable 接口,并将比较逻辑放在它的抽象方法中。
int compareTo(T o)
例如:
class MyString extends String { @Override int compareTo(Object obj) { // 在这里放入您的逻辑。 // 如果此项“小于”obj,则返回-1。 // 如果这个等于 obj,则返回 0 // 如果这比 obj“大”,则返回 1。
// 先测试长度 if (length() < obj.length()) return -1; if (length() > obj.length()) return 1;
// 长度相同,使用 String 已经定义的字母顺序比较 return super.compareTo(obj); } }
免责声明,我实际上没有测试过这段代码,但它应该接近您想要的。
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);
}
}