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);
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With