Сортировать Java TreeSet с помощью Comparator - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь отсортировать TreeSet объектов ("Etudiant"), используя Comparator интерфейс. Это Comparator реализация:

import java.util.Comparator;


public class TriParNom implements Comparator<Etudiant>{
    public int compare(Etudiant o1, Etudiant o2) {
        return o1.getNom().compareTo(o2.getNom());
    }
}

вот объявление TreeSet и вызов компаратора в основном:

TreeSet<Etudiant> University= new TreeSet<Etudiant>(new TriParNom());

ошибка, которую я получаю в основном классе, когда я объявляю TreeSet и вызываю компаратор, это: не найдено подходящего конструктора для TreeSet (TriParNom).

Какие-либо решения, пожалуйста? заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Если ваш код соответствует приведенному ниже фрагменту, он должен работать без проблем. В тот момент, когда вы удаляете деталь implements Comparator<Etudiant> из class TriParNom, вы получите ошибку, указывающую, что подходящий конструктор не найден. Теперь, еще один глупый способ, которым это может случиться, если вы не перекомпилируете свои классы после того, как вы внедрили компаратор для вашего TriParNom - но это слишком очевидно. Ваш класс, который содержит метод main (который объявляет Treeset), импортируется java.util.TreeSet?

import java.util.Comparator;
import java.util.TreeSet;

public class TreesetCheck {
    public static void main(String[] args) {
        TreeSet<Etudiant> University= new TreeSet<Etudiant>(new TriParNom());
    }
}

class TriParNom implements Comparator<Etudiant>{
    public int compare(Etudiant o1, Etudiant o2) {
        return o1.getNom().compareTo(o2.getNom());
    }
}

class Etudiant {
    public String getNom() {
        // TODO Auto-generated method stub
        return "some";
    }
}
0 голосов
/ 04 ноября 2018

Я попробовал очень простую реализацию на основе предоставленной вами информации, и я предоставлю вам свои результаты:

project structure

Этудиантский класс - очень простое pojo

public class Etudiant {

private String nom;

public String getNom() {
    return nom;
}

public void setNom(String nom) {
    this.nom = nom;
}   }

Класс TriParNom - это простой компаратор, который вы описали:

import java.util.Comparator;

public class TriParNom implements Comparator<Etudiant> {

    @Override
    public int compare(Etudiant o1, Etudiant o2) {
        return o1.getNom().compareTo(o2.getNom());
    }

}

А вот простой класс с точкой входа и примером метода для применения вновь созданного набора деревьев

import java.util.TreeSet;

public class Main {

    public static void main(String[] args) {
        TreeSet<Etudiant> u = new TreeSet<>(new TriParNom());
        System.out.printf("size? %d%n", u.size());      
    }

}

Результаты выполнения следующие:

exec

Судя по всему, ошибок компиляции тоже нет.

...