这是我到目前为止的代码:
package Demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Demo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("3.3.x");
list.add("1.2.x");
list.add("2.3.x");
VersionComparator x = new VersionComparator();
Collections.sort(list, x );
for(String str : list)
System.out.println(str);
}
static class VersionComparator implements Comparator {
public int compare(String str1, String str2) {
String firstNumberStringOne = str1.split(".")[0];
String firstNumberStringTwo = str2.split(".")[0];
String secondNumberStringOne = str1.split(".")[1];
String secondNumberStringTwo = str2.split(".")[1];
return;
}
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return 0;
}
}
}
我想按照期间之前出现的第一个数字对列表中的项目进行排序。如果这两个数字相等,则转到第二个数字并比较这些数字。如果平等只是归还他们。
我不确定如何使用比较器。我试图实现它,编译器抱怨我需要在第二个比较方法中添加覆盖。我也不知道如何进行比较如何返回。我明白,如果它等于那么它返回一个0并且它小于那么它返回-1并且大于1.但是在编码方面我失去了程序如何知道如何对它进行排序。
答案 0 :(得分:2)
您的VersionComparator
班级正在实施Comparator
界面的原始格式,其中compare
方法将花费2 Object
而非2 String
s
通过提供String
作为类型参数来实现接口。然后,编译器将识别您的compare
方法,将String
s作为参数,作为接口的正确实现。您不需要compare
方法Object
。
static class VersionComparator implements Comparator<String> {
你当然需要在你的compare
method中实现比较逻辑,如果int
比较小于等于,则返回小于0,0或大于0的str1
,或者根据您的自定义排序顺序,大于str2
。