Java 理解用于不同场景的一段代码

Java 理解用于不同场景的一段代码,java,sorting,Java,Sorting,有人能解释一下这段代码是如何工作的吗 enum MyStringComparator implements Comparator<String> { INSTANCE; @Override public int compare(String s1, String s2) { int n1 = Integer.parseInt(s1.split("\\.")[2]); int n2 = Integer.parseInt(s2.s

有人能解释一下这段代码是如何工作的吗

enum MyStringComparator implements Comparator<String> {
    INSTANCE;

    @Override
    public int compare(String s1, String s2) {
        int n1 = Integer.parseInt(s1.split("\\.")[2]);
        int n2 = Integer.parseInt(s2.split("\\.")[2]);
        return Integer.compare(n1, n2);
    }
}
所以从我的理解来看,我想在x处分开,看看在那之前是什么

因此,我尝试了以下方法:

enum MyStringComparator implements Comparator<String> {
    INSTANCE;

    @Override
    public int compare(String s1, String s2) {
        int n1 = Integer.parseInt(s1.split("\\.\\.x")[5]);
        int n2 = Integer.parseInt(s2.split("\\.\\.x")[5]);
        return Integer.compare(n1, n2);
    }
}
enum MyStringComparator实现Comparator{
实例;
@凌驾
公共整数比较(字符串s1、字符串s2){
int n1=Integer.parseInt(s1.split(“\\.\\.x”)[5]);
int n2=Integer.parseInt(s2.split(“\\.\\.x”)[5]);
返回整数。比较(n1,n2);
}
}

这不起作用,因为我得到了一个数字格式异常。我相信我只是不理解代码的作用

第一段代码将每个字符串的第三个组成部分按点拆分,然后将它们转换为整数,并进行比较

但是,在您的例子中,由于第三个组件是
x
,它不是一个数字,所以这不起作用。如果要比较前两个组件,必须执行以下操作:

String[] parts1 = s1.split("\\.");
String[] parts2 = s2.split("\\.");
int comparison = Integer.compare(Integer.parseInt(parts1[0]), Integer.parseInt(parts2[0]));
if (comparison == 0) {
    comparison = Integer.compare(Integer.parseInt(parts1[1]), Integer.parseInt(parts2[1]));
}
return comparison;
如果您正在使用番石榴,请执行以下操作:

String[] parts1 = s1.split("\\.");
String[] parts2 = s2.split("\\.");
return ComparisonChain.start()
        .compare(Integer.parseInt(parts1[0]), Integer.parseInt(parts2[0]))
        .compare(Integer.parseInt(parts1[1]), Integer.parseInt(parts2[1]))
        .result();

这将以升序返回顺序,是否可以按降序执行。我试过了。排序(builds,Collections.reverseOrder());在使用了第一种排序,但它不起作用之后,我假设我必须在比较方法中做些什么?
String[] parts1 = s1.split("\\.");
String[] parts2 = s2.split("\\.");
return ComparisonChain.start()
        .compare(Integer.parseInt(parts1[0]), Integer.parseInt(parts2[0]))
        .compare(Integer.parseInt(parts1[1]), Integer.parseInt(parts2[1]))
        .result();