Я работал над собственным методом compareTo, который сортирует список введенных строк через командную строку. Метод должен организовать строки от самых больших до самых маленьких. Если несколько строк одинаковы по длине, расположите их в алфавитном порядке.
Пока у меня есть:
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;
}
}
Теперь мне было любопытно, можно ли сортировать равные строки в алфавитном порядке, не итерации по равным строкам в поисках символа разных значений.
** sortableString.getContents просто возвращает строковый тип введенного LengthSortableString.
В случае, когда две длины равны, просто верните алфавитное сравнение:
else if (/* equal lengths */) {
return str1.compareTo(str2); // i.e. using compareTo of String
}
str1
и str2
представляют основную String
ваших экземпляров LengthSortableString
.
String уже реализует 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);
}