Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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); 
}
like image 762
Carrier Avatar asked Dec 03 '25 16:12

Carrier


1 Answers

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.

like image 128
Hovercraft Full Of Eels Avatar answered Dec 06 '25 04:12

Hovercraft Full Of Eels