2016-12-14 59 views
3

我一直在嘗試使用Comparable接口對我的ArrayList進行排序。如果您有任何提示/修復會很棒,我似乎無法使其工作。Netbeans java排序使用可比較

這裏的公司(bedrijf)類持有員工的ArrayList(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); 
} 
+0

不,不要創建自己的Comparable界面! –

回答

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(...)將承認的唯一一個。

+0

我刪除了我製作的Comparable界面,它工作正常! – Carrier

+0

@Carrier:很划算! –

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) 

分配您的比較明確。

它似乎沒有類實現比較器接口在您的代碼。