使用Comparable的Netbeans java排序

时间:2016-12-14 01:55:53

标签: java netbeans comparable

我一直在尝试使用Comparable接口对ArrayList进行排序。如果您有任何提示/修复可能会很棒,我似乎无法让它工作!

这是公司(bedrijf)类,它拥有一个员工阵列列表(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" ;
    }
}

这是抽象人(persoon)类(有子类):

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;
    }
}

和可比较的界面:

package nl.hva.oop1.bedrijf.models;

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

2 个答案:

答案 0 :(得分:3)

这是你的错误:

  

和可比较的界面:

package nl.hva.oop1.bedrijf.models;

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

不要创建自己的Comparable界面。而是使用Comparable interface provided by Core Java。这是Collections.sort(...)唯一能识别的那个。

答案 1 :(得分:0)

替换

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

 Collections.sort(medewerkers,your class object that implement Comparator Interface); //I want to sort the ArrayList here

为了使用您自己的比较器,您应该使用此API

 public static <T> void sort(List<T> list, Comparator<? super T> c)

明确指定比较器

似乎没有类在您的代码中实现 Comparator Interface