这是我目前的代码:
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。但是在编码方面我不知道程序如何知道如何对其进行排序。
最佳答案
您的 VersionComparator
类正在实现 Comparator
接口(interface)的原始形式,其中 compare
方法将采用 2 个 Object
而不是 2 个 String
。
通过提供 String
作为类型参数来实现接口(interface)。然后编译器将识别您的 compare
方法,将 String
作为接口(interface)的正确实现作为参数。您不需要采用 Object
的 compare
方法。
static class VersionComparator implements Comparator<String> {
您当然需要在 compare
method 中实现比较逻辑,如果 str1
比较小于、等于或大于 str2
,则返回小于 0、0 或大于 0 的 int
您的自定义排序顺序。
关于java - 如何创建自定义比较器来对编号系统进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29952736/