Метод Collections.sort () неправильно выбирает метод перегрузки - PullRequest
0 голосов
/ 17 октября 2019

Моя цель - отсортировать список лиц. Я использую метод сравнения интерфейса Comparator.

Я создал три класса. а именно

Person.java, AgeComparator.java, SortingExample.java
.

Класс Person - это простой класс с двумя полями (имя, возраст), также с геттерами. Затем в моем классе AgeComaparator я реализовал интерфейс Comparator и передал класс Person в качестве параметра Type.

, а затем переопределил метод сравнения, исходящий из интерфейса Comparator.

, чтобы выполнить это приложение в моемSortingExample Я создал 3 объекта типа Person. затем добавьте эти объекты в ArrayList типа Person.

, затем вызовите метод Collections.sort (), который принимает два аргумента. это объект списка и класс, который реализует интерфейс Comparator.

Person.java

package com.nadee.module3;

import java.util.Objects;

public class Person {

    private final String name;
    private final int age;

    public Person(String name, int age) {
        Objects.requireNonNull(name);
        this.name = name;
        this.age = age;
    }


    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }


    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }


    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }


    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

AgeComparator.java

package com.nadee.module3;

import java.util.Comparator;

public class AgeComparator implements Comparator<Person>{

    @Override
    public int compare(Person left, Person right) {
        return Integer.compare(left.getAge(), right.getAge());
    }

}

SortingExample.java

package com.nadee.module3;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.nadee.collections.Person;

public class SortingExample {
    public static void main(String[] args) {


    Person p1 = new Person("will smith", 45);
    Person p2 = new Person("john snow", 33);
    Person p3 = new Person("johny depth", 55);

    List<Person> actors = new ArrayList<Person>();

    actors.add(p1);
    actors.add(p2);
    actors.add(p3);

    System.out.println(actors);

    Collections.sort(actors, new AgeComparator());

    System.out.println(actors);

    }
}

Я использую Eclipse IDE для этого приложения, и при методе

sort 
отображается «красная» линия.

ошибка говорит о том, как показано ниже,

"Методsort (List, Comparator) в типе Collections не применим для аргументов (List, AgeComparator) "

Я следовал следующей статье https://www.journaldev.com/16094/java-collections-sort

что я тут делаю неправильно? любая помощь будет высоко ценится.

спасибо

1 Ответ

2 голосов
/ 17 октября 2019

Класс Person находится по адресу com.nadee.module3 , а класс AgeComparator использует для этого типа Person

Но в классе SortingExample , вы используете Person из com.nadee.collections .Person. Это должно полностью не работать. Другой пункт вашего кода:

  • Пожалуйста, используйте actors.sort(new AgeComparator());, Collections.sort слишком распространено
...