繁体   English   中英

Java,使用 compareTo 方法在 ToString 中按字母顺序打印数组列表

[英]Java, printing arraylist in alphabetical order in ToString with compareTo method

我想按字母顺序打印数组列表“medewerkers”(英文员工)中的人员。

我已经创建了一个 compareTo 方法来按字母顺序获取它们,这个方法设置在一个名为“Persoon”(英语中的人)的抽象类中。 我想打印“Bedrijf”类的 ToString 方法,这必须按字母顺序打印 arraylist 中的名称。 但我不知道该怎么做。

我的程序结构:

我有一个班级“Bedrijf”(英文公司),其中公司的所有员工都设置在一个数组列表中。 我还有一个抽象类“Persoon”(英语中的person),因为公司有人员。 然后还有其他几个类在这些类中扩展了“Persoon”,我定义了不同的功能,例如经理、普通员工(我的程序中的 Werknemer)等等。 现在所有这些人都设置在“Bedrijf”类的数组列表中,我想按字母顺序打印我在数组列表中设置的所有名称。

在我的主类中,我通过 Bedrijf 的“neemInDienst”方法将人员添加到 lisy:

public class Main {

    /**
     * The entry point of application.
     *
     * @param args the input arguments
     */
    public static void main(String[] args) {

        Bedrijf bedrijf = new Bedrijf("HvA");

        Werknemer w = new Werknemer(1200.00, "Jantine Jansen");
        bedrijf.neemInDienst(w);

        Werknemer we = new Werknemer(1300.00, "Piet Pietersen");
        bedrijf.neemInDienst(we);

        Vrijwilliger v = new Vrijwilliger("Guus Goedhart");
        bedrijf.neemInDienst(v);
        v.huurIn(10);

        Manager m = new Manager(10000.00, "Brigitte Baas");
        bedrijf.neemInDienst(m);
        m.kenBonusToe(750);

        Manager a = new Manager(10000.00, "Dirk Teur");
        bedrijf.neemInDienst(a);
        a.kenBonusToe(1200);

        Zzper z = new Zzper(120, "Beun Haas");
        bedrijf.neemInDienst(z);
        z.huurIn(40);

        // print de toString van het bedrijf
        System.out.println(bedrijf);

        // print alle inkomsten van de personen in het bedrijf (alle functies)
        bedrijf.printInkomsten();

        // print de aantal van de managers
        System.out.println("\nAantal in management: " + bedrijf.aantalManagers());
    }

}

数组列表所在的 Bedrijf 类以及我要打印的类:

public class Bedrijf {
    private String naam;


    /**
     * lijst van alle Medewerkers.
     */
    protected List<Persoon> medewerkers = new ArrayList<>();

    //Magic numbers
    static private int MIN_MANAGERS = 0;


    /**
     * Instantiates a new Bedrijf.
     *
     * @param naam the naam
     */
    public Bedrijf(String naam) {
        this.naam = naam;
    }

    /**
     * Print inkomsten.
     *
     */
    public void printInkomsten() {
        System.out.println("Inkomsten van alle personen:\n");


        for (Persoon p : medewerkers) {
            if (p.berekenInkomsten() == 0) {
                System.out.println(p.naam + "," + " bedankt voor uw inzet!"); // Voor de vrijwilligers
            } else {
                System.out.println(p.naam + "," + " inkomsten: " + p.berekenInkomsten()); // Voor alle andere personen
            }
        }
    }


    /**
     * Aantal managers int.
     *
     * @return the int
     */
    public int aantalManagers() {
        int managers = MIN_MANAGERS;
        for (Persoon person : medewerkers) {
            if (person instanceof Manager) {
                managers++;
            }
        }
        return managers;
    }

    /**
     * Neemin dienst.
     *
     * @param persoon the persoon
     */
    public void neemInDienst(Persoon persoon) {
        this.medewerkers.add(persoon);

    }

    @Override
    public String toString() {
        String a = "Bedrijf " + naam + " heeft " + medewerkers.size() + " mederwerkers:\n";
        StringBuilder namen = new StringBuilder();
        for (Persoon x : medewerkers) {
            namen.append(x.naam).append("\n");
        }

        return a + namen;
    }


}

抽象类“人”

public abstract class Persoon implements Comparable<Persoon> {
    String naam;

    /**
     * Instantiates a new Persoon.
     *
     * @param naam the naam
     */
    public Persoon(String naam) {
        this.naam = naam;
    }

    /**
     * Bereken inkomsten.
     *
     * @return the double
     */
    public abstract Double berekenInkomsten();

    /**
     * compareto method om int terug te geven voor alfabetische volgorde
     *
     * @param other
     * @return laagste int is eerste in de alfabetische volgorde
     */
    @Override
    public int compareTo(Persoon other){
        return this.naam.compareTo(other.naam);
    }

    @Override
    public String toString() {
        return this.naam;
    }
}

也许如果它更容易阅读它的功能:

@Override
    public String toString() {
        String a = "Bedrijf " + naam + " heeft " + medewerkers.size() + " mederwerkers:\n";
        StringBuilder namen = new StringBuilder();
        for (Persoon x : medewerkers) {
            namen.append(x.naam).append("\n");
        }

        return a + namen;
    }

我对 Java 还很陌生,所以如果有人可以提供帮助,那就太好了! 提前致谢!

在评论的帮助下修复了问题。

添加:

Collections.sort(medewerkers)

在 to string 方法中,在循环遍历列表以按字母顺序打印所有名称之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM