Когда вы сортируете, -1 и 0 , по сути, очень похожи на порядок сортированного списка, так как элементы, где compareTo
оценивается в 0, будут простосгруппированы вместе.
Вы бы "практически" использовали это сравнение в других сценариях, например, там, где вы можете не захотеть дублировать добавление сложных объектов в список (да, вы также можете достичь этого сценария с помощью set
также).
Скажем, у нас есть объект Book
следующим образом:
import java.util.Comparator;
public class Book implements Comparable {
String isbn;
String title;
public Book(String id, String title) {
this.isbn = id;
this.title = title;
}
String getIsbn() {
return isbn;
}
String getTitle() {
return title;
}
@Override
public int compareTo(Object o) {
return Comparator
.comparing(Book::getIsbn)
.thenComparing(Book::getTitle)
.compare(this, (Book) o);
}
@Override
public String toString() {
String output = new StringBuilder()
.append(isbn).append(":").append(title)
.toString();
return output;
}
}
Здесь мы переписали compareTo
книги, чтобы создать пользовательское сравнение, которое сначала проверяет книги isbn, а затемзаглавие.
Скажем (например), у вас есть библиотека, в которой есть книги. Возможно, вы захотите запретить вашему пользователю добавлять дубликаты книг в эту библиотеку ...
public class Library {
public static void main(String [] args) {
List<Book> library = new ArrayList<>();
library.add(new Book("9780593098240", "Children of Dune"));
library.add(new Book("9780593098233", "Dune Messiah"));
library.add(new Book("9780441172719", "Dune"));
// Just to show the sorting, based on multiple attributes.
Collections.sort(library);
System.out.println("Books in library: " + Arrays.toString(library.toArray()));
// You would obviously have some code for entering a book here, but easier to just create the object for an example.
Book newBook = new Book("9780593098240", "Children of Dune");
for (Book bookInLibrary : library) {
if (bookInLibrary.compareTo(newBook) == 0) {
System.out.println("We already have that book in the library.");
break;
}
}
}
}