简体   繁体   English

可比-compareTo方法

[英]Comparable- compareTo method

I've been working on my own compareTo method which sorts a list of entered strings via the command line. 我一直在研究自己的compareTo方法,该方法通过命令行对输入的字符串列表进行排序。 The method needs to organise the strings from largest to smallest. 该方法需要从最大到最小组织字符串。 If more than one string are equal in length, arrange alphabetically. 如果多个字符串的长度相等,请按字母顺序排列。

So far I have: 到目前为止,我有:

public int compareTo(LengthSortableString anotherSortable) {
    if (anotherSortable.getContents().length() > sortableString.length()) {
        return 1;
    } else if (anotherSortable.getContents().length() == sortableString.length()) {
        return 0;
    } else {
        return -1;
    }
}

Now I was curious if it was possible to sort the equal strings alphabetically without having to iterate through the equal strings looking for a char of different values. 现在我很好奇,是否有可能按字母顺序对相等的字符串进行排序,而不必遍历相等的字符串以查找不同值的char。

** sortableString.getContents just returns a string type of the entered LengthSortableString. ** sortableString.getContents仅返回输入的LengthSortableString的字符串类型。

In the case where the two lengths are equal, just return the alphabetical comparison: 在两个长度相等的情况下,只需返回字母比较:

else if (/* equal lengths */) {
    return str1.compareTo(str2);  // i.e. using compareTo of String
}

str1 and str2 represent the underlying String s of your LengthSortableString instances. str1str2代表LengthSortableString实例的基础String

String already implements Comparable, so simply use anotherSortable.getContents().compareTo(sortableString); 字符串已经实现了Comparable,因此只需使用anotherSortable.getContents().compareTo(sortableString); :

public int compareTo(LengthSortableString anotherSortable) {
    int byLength = Integer.valueOf(anotherSortable.getContents().length()).compareTo(sortableString.length());
    if (byLength != 0) {
        return byLength;
    }
    return anotherSortable.getContents().compareTo(sortableString);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM