Netbeans java 使用 Comparable 排序
Netbeans java sort using Comparable
我一直在尝试使用 Comparable 接口对 ArrayList 进行排序。我似乎无法让它工作,如果你有任何 tips/fixes 那就太好了!
这是公司 (bedrijf) class,它拥有员工 (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)class(有子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;
}
}
以及 Comparable 接口:
package nl.hva.oop1.bedrijf.models;
public interface Comparable<E> {
public int compareTo(E o);
}
替换
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)
明确分配您的比较器。
而且您的代码中似乎没有 class 实现 比较器接口 。
这是你的错误:
And the Comparable interface:
package nl.hva.oop1.bedrijf.models;
public interface Comparable<E> {
public int compareTo(E o);
}
不要创建自己的 Comparable 接口。而是使用 Comparable interface provided by Core Java。这是 Collections.sort(...)
唯一能识别的。
我一直在尝试使用 Comparable 接口对 ArrayList 进行排序。我似乎无法让它工作,如果你有任何 tips/fixes 那就太好了!
这是公司 (bedrijf) class,它拥有员工 (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)class(有子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;
}
}
以及 Comparable 接口:
package nl.hva.oop1.bedrijf.models;
public interface Comparable<E> {
public int compareTo(E o);
}
替换
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)
明确分配您的比较器。
而且您的代码中似乎没有 class 实现 比较器接口 。
这是你的错误:
And the Comparable interface:
package nl.hva.oop1.bedrijf.models; public interface Comparable<E> { public int compareTo(E o); }
不要创建自己的 Comparable 接口。而是使用 Comparable interface provided by Core Java。这是 Collections.sort(...)
唯一能识别的。