Search code examples
javanetbeanscomparable

Netbeans java sort using Comparable


I've been trying to sort my ArrayList using Comparable interface. I can't seem to get it to work if you have any tips/fixes that would be great!

Here's the company(bedrijf) class which holds an ArrayList of employees(werknemers):

package nl.hva.oop1.bedrijf.models;

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

public class Bedrijf {
    private String naam;
    private List<Persoon> medewerkers = new ArrayList<Persoon>();

    public Bedrijf (String naam) {
        this.naam = naam;
    }

    public void printInkomsten() {
        String inkomstenText = "Inkomsten van alle personen: ";

        Collections.sort(medewerkers); //I want to sort the ArrayList here

        for (Persoon p : medewerkers) {
            if (p.berekenInkomsten() != 0)
                inkomstenText += "\n\t" + p.toString() + ", inkomsten: " + p.berekenInkomsten();
            else
                inkomstenText += "\n\t" + p.toString() + ", bedankt voor uw inzet!";
        }

        System.out.println(inkomstenText);
    }

    public int aantalManagers() {
        int managers = 0;

        for(Persoon p : medewerkers) {
            if(p instanceof Manager)
                managers++;
        }

        return managers;
    }

    public void neemInDienst(Persoon p) {
        this.medewerkers.add(p);
    }

    @Override
    public String toString() {
        String bedrijfText = "Bedrijf HvA heeft " + medewerkers.size() + " medewerkers: ";

        for (Persoon p : medewerkers) {
            bedrijfText += "\n\t" + p.toString();
        }

        return bedrijfText + "\n" ;
    }
}

Here is the Abstract Person(persoon) class (has sub-classes):

package nl.hva.oop1.bedrijf.models;

public abstract class Persoon implements Comparable<Persoon> {
    private String naam;

    public Persoon(String naam) {
        this.naam = naam;
    }

    public abstract double berekenInkomsten();

    @Override
    public int compareTo(Persoon p) {
        return this.naam.compareTo(p.naam);
    }

    @Override
    public String toString() {
        return naam;
    }
}

And the Comparable interface:

package nl.hva.oop1.bedrijf.models;

public interface Comparable<E> { 
    public int compareTo(E o); 
}

Solution

  • This is your mistake:

    And the Comparable interface:

    package nl.hva.oop1.bedrijf.models;
    
    public interface Comparable<E> { 
        public int compareTo(E o); 
    }
    

    Don't create your own Comparable interface. Instead use the Comparable interface provided by Core Java. That's the only one that the Collections.sort(...) will recognize.