使用比较器排序字符串长度

在尝试根据元素字符串长度对数组进行排序时,我遇到了编译错误。 我有一套开始,

Set arraycat = new HashSet(); //add contents to arraycat String[] array = arraycat.toArray(new String[0]); //array looks like this now: //array=[cat,cataaaa,cataa,cata,cataaa] 

我理想的想要排序

 array=[cat,cata,cataa,cataaa,cataaaa] 

所以我有一个类型的比较器

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

然后我打电话给上课

 Collections.sort(array, new comp()); 

但是,它抛出了两个编译错误:

 comp is not abstract and does not override abstract method compare(java.lang.Object,java.lang.Object) in java.util.Comparator class comp implements Comparator { ^ testa.java:59: cannot find symbol symbol : method sort(java.lang.String[],comp) location: class java.util.Collections Collections.sort(array, new comp()); ^2 errors 

我很感激任何解决问题的线索。

您需要为Comparator指定一个类型参数才能使您的实现正常工作。

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

在Java 1.7及更高版本中,您还可以将此方法的主体简化为:

 class comp implements Comparator { public int compare(String o1, String o2) { return Integer.compare(o1.length(), o2.length()); } } 

此外, Collections.sort List对象进行排序。 由于您要对数组进行排序,因此应使用Arrays.sort

 Arrays.sort(array, new comp()); 

如果数据源是array则需要使用Arrays.sort()方法。

例如,

 String []array={"first","second","third","six"}; Arrays.sort(array,new Comparator() { public int compare(String s1,String s2) { return s1.length() - s2.length(); } }); 

或者将数组转换为List以使用Collections.sort()方法,

 Collections.sort(Arrays.asList(array),new Comparator() { public int compare(String s1,String s2) { return s1.length() - s2.length(); } }); 

应该

 class comp implements Comparator { ... 

甚至更好

 Collections.sort(array, new Comparator { ... 

(甚至没有命名仅使用一次的类)

我最近有类似的任务,我将为您提供一个额外的例子。

 import java.util.Arrays; import java.util.Comparator; //for more information: http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html /** * * @author Xilef */ public class StringKorter implements Comparator { @Override public int compare(String s1, String s2){ if (s1.length() > s2.length()) return 1; else if (s1.length() < s2.length()) return -1; else return 0; } public static void main(String[] args) { String[] woorden = { "boot", "kinderen", "stoel", "volwassenen", "ei", "stoel", "kop", "zeshoek", "stoel", "ei" }; System.out.println("woorden: " + Arrays.toString(woorden));//before sorting by length Arrays.sort(woorden, new StringKorter()); System.out.println("Array woorden after sorting by length: " + Arrays.toString(woorden)); } } 

一个衬里

上升

 Arrays.sort(words, Comparator.comparingInt(String::length)); 

降序

 Arrays.sort(words, Comparator.comparingInt(String::length).reversed());