Пример CompareTo () - сообщите заказ заранее - PullRequest
4 голосов
/ 14 января 2020

У меня есть следующий пример, и я хотел бы знать, есть ли способ определить, в порядке возрастания или убывания, массив mov ie сортируется, просто глядя на метод compareTo () БЕЗ запуска кода и делать проб и ошибок.

Мов ie класс:

 package com.company;

public class Movie implements Comparable<Movie>  {
    private double rating;
    private String name;
    private int year;

    // Used to sort movies by year
    public int compareTo(Movie m)
    {
        if (this.year == m.year) {
            return 0;
        }

        else if (this.year > m.year) {
            return 1;
        }

        return -1;

    }

    // Constructor
    public Movie(String nm, double rt, int yr)
    {
        this.name = nm;
        this.rating = rt;
        this.year = yr;
    }


}

Основной класс:

package com.company;

import java.util.*;

public class Main {

    public static void main(String[] args) {
        ArrayList<Movie> list = new ArrayList<Movie>();
        list.add(new Movie("Force Awakens", 8.3, 2015));
        list.add(new Movie("Star Wars", 8.7, 1977));
        list.add(new Movie("Empire Strikes Back", 8.8, 1980));
        list.add(new Movie("Return of the Jedi", 8.4, 1983));

        Collections.sort(list);

        System.out.println("Movies after sorting : ");
        for (Movie movie: list)
        {
            System.out.println(movie.getName() + " " +
                    movie.getRating() + " " +
                    movie.getYear());
        }
    }
}

Результат:

Movies after sorting : 
Star Wars 8.7 1977
Empire Strikes Back 8.8 1980
Return of the Jedi 8.4 1983
Force Awakens 8.3 2015

Привет и спасибо заранее

Фабиан

1 Ответ

3 голосов
/ 14 января 2020

Вы можете прочитать Javado c из Comparable s compareTo и обнаружить, что он возвращает:

отрицательное целое число, ноль или положительное целое число, поскольку этот объект меньше, равно или больше указанного объекта.

В вашем случае вы возвращаете отрицательное значение (-1), если этот объект имеет год меньше, чем у другого объекта, 0 если годы равны и имеют положительное значение (1), если этот объект имеет больший год, чем год другого объекта.

Следовательно, один Movie считается «меньше» другого Movie, если он имеет меньшее значение свойства year.

Следовательно, ваш compareTo будет сортировать Movie s в порядке возрастания лет, поскольку Collections.sort(List<T> list):

Сортировка указанный список в порядке возрастания, в соответствии с сопоставимым естественным порядком его элементов.

...