根据对象参数和用户输入过滤ArrayList

时间:2018-11-05 09:17:01

标签: java arraylist input filtering java.util.scanner

import java.util.Scanner;

public class Kommandozeilenmenue {
Scanner scan;
Medienbibliothek mb = new Medienbibliothek();


public Kommandozeilenmenue() {
    this.scan = new Scanner(System.in);
    bisherigeMedien();
}

public void bisherigeMedien() {
    Medien m1 = new Filme("Java Wars", "Claudio Landerer", "25.10.2018", 150, true, false);
    Medien m2 = new EBooks("Cloverfield Paradox", "Julius Onah", "25.10.2018", 12345678, 120, 100000);
    Medien m3 = new Filme("Haus des Geldes", "Alex Pina", "01.11.2018", 200, false, true);
    Medien m4 = new EBooks("Poltergeist", "Tobe Hooper", "01.11.2018", 87654321, 175, 100);

    mb.medienHinzufuegen(m1);
    mb.medienHinzufuegen(m2);
    mb.medienHinzufuegen(m3);
    mb.medienHinzufuegen(m4);
}


public void MenueAnzeigen() {
    System.out.println("-----------------------------------------");
    System.out.println("HAUPTMENÜ");
    System.out.println("1) HINZUFÜGEN");
    System.out.println("2) FILTERN");
    System.out.println("3) LISTE-AUSGEBEN");
    System.out.println("4) exit");
}

public void unterMenueHinzufügen() {
    System.out.println("-----------------------------------------");
    System.out.println("HINZUFÜGENMENÜ");
    System.out.println("1) FILM-HINZUFÜGEN");
    System.out.println("2) EBOOK-HINZUFÜGEN");
    System.out.println("3) Zurück");
}

public void unterMenueFiltern() {
    System.out.println("-----------------------------------------");
    System.out.println("FILTERMENÜ");
    System.out.println("1) FILTERN");
    System.out.println("2) Zurück");
}

public void unterMenueListe() {
    System.out.println("-----------------------------------------");
    System.out.println("LISTENMENÜ");
    System.out.println("1) FILME");
    System.out.println("2) EBOOKS");
    System.out.println("3) DETAILS");
    System.out.println("4) KURZ");
    System.out.println("5) Zurück");
}


public void start() {
    MenueAnzeigen();
    Scanner scan = new Scanner(System.in);
    String s = scan.nextLine();

    //Möglichkeit 1 wurde gewählt
    if(s.equals("1")) {
        unterMenueHinzufügen();
        s = scan.nextLine();
        if(s.equals("1")) {
            filmHinzufügen();
        }else if(s.equals("2")) {
            bookHinzufügen();
        }else if(s.equals("3")) {
            start();
        }else {
            fehler();
        }
    }
    //Möglichkeit 2 wurde gewählt
    else if(s.equals("2")) {
        unterMenueFiltern();
        s = scan.nextLine();
        if(s.equals("1")) {
            mediumFiltern();
        }else if(s.equals("2")) {
            start();
        }else {
            fehler();
        }
    }
        //Möglichkeit 3 wurde gewählt
    else if(s.equals("3")) {
        unterMenueListe();
        s = scan.nextLine();
        if(s.equals("1")) {
            filmListeAusgeben();
            start();
        }else if(s.equals("2")) {
            bookListeAusgeben();
            start();
        }else if(s.equals("3")) {
            listeAusgeben();
            start();
        }else if(s.equals("4")) {
            mb.kurzBeschreibung();
            start();
        }else if(s.equals("5")) {
            start();
        }else {
            fehler();
        }
    }
        //Möglichkeit 4 wurde gewählt
    else if(s.equals("4")) {
        System.out.println("Auf Wiedersehen!");
    }
    //Fehlermeldung bei ungültiger Eingabe
    else {
        fehler();
    }
    scan.close();
}


public void listeAusgeben() {
    mb.anzeigen();
}

public void fehler()
{
    System.out.println("Sie können nur 1, 2, 3 oder 4 eingeben!");
}

//Wenn Fall 1 eintritt --> weitere Entscheidungsmöglichkeiten
public void filmHinzufügen() {
    System.out.println("-----------------------------------------");
    System.out.println("Bitte geben Sie den Namen des neuen Films ein:");
    String name = scan.nextLine();
    System.out.println("Bitte geben Sie einen Kommentar zu dem neuen Film ein:");
    String kommentar = scan.nextLine();
    System.out.println("Bitte geben Sie das Erscheinungsdatum des neuen Films ein:");
    String datum = scan.nextLine();
    System.out.println("Bitte geben Sie die Spielzeit des neuen Films ein:");
    int spielzeit = scan.nextInt();
    System.out.println("Ist der Film UHD?");
    boolean uhd = scan.nextBoolean();
    System.out.println("Ist der Film HD?");
    boolean hd = scan.nextBoolean();

    Medien m5 = new Filme(name, kommentar, datum, spielzeit, uhd, hd);
    mb.medienHinzufuegen(m5);
    start();
}

public void filmListeAusgeben() {
    for(Filme filme : mb.alleFilmeAlsListe())
    {
        filme.anzeigen();
    }
    start();
}

//Wenn Fall 2 eintritt --> weitere Entscheidungsmöglichkeiten
public void bookHinzufügen() {
    System.out.println("-----------------------------------------");
    System.out.println("Bitte geben Sie den Namen des neuen eBooks ein:");
    String name = scan.nextLine();
    System.out.println("Bitte geben Sie einen Kommentar zu dem neuen eBook ein:");
    String kommentar = scan.nextLine();
    System.out.println("Bitte geben Sie das Erscheinungsdatum des neuen eBooks ein:");
    String datum = scan.nextLine();
    System.out.println("Bitte geben Sie die ISBN-Nummer des neuen eBooks ein:");
    int isbn = scan.nextInt();
    System.out.println("Bitte geben Sie die Seitenanzahl des neuen eBooks ein:");
    int seiten = scan.nextInt();
    System.out.println("Bitte geben Sie die Auflagszahl des neuen eBooks ein:");
    int auflage = scan.nextInt();

    Medien m6 = new EBooks(name, kommentar, datum, isbn, seiten, auflage);
    mb.medienHinzufuegen(m6);
    start();
}

public void mediumFiltern() {
    System.out.println("-----------------------------------------");
    System.out.println("Bitte geben Sie den Namen des gesuchten Films ein:");
    String s = scan.nextLine();

    for(Medien m : mb) {
        if(m.contains(s)) {
            System.out.println(m);
        }

    }

}

public void bookListeAusgeben() {
    for(EBooks ebooks : mb.alleEBooksAlsListe())
    {
        ebooks.anzeigen();
    }
    start();
}

}

这是我的班级Kommandozeilenmenü。在其中,我从Medien类型创建一个ArrayList。我也创建一个扫描仪来跟踪用户输入。 Medien是EBooks和Filme的超类,因为它们非常相似。我的任务是根据用户输入过滤ArrayList。用户输入可以是Object Medien中的任何字段。这是Medien班。

    public class Medien{

    private int id;
    protected String name;
    private String kommentar;
    private String erscheinungsdatum;
    private static int counter;

    public Medien(String name, String kommentar, String erscheinungsdatum) {
        super();
        counter++;
        this.id = counter;
        this.name = name;
        this.kommentar = kommentar;
        this.erscheinungsdatum = erscheinungsdatum;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getKommentar() {
        return kommentar;
    }

    public void setKommentar(String kommentar) {
        this.kommentar = kommentar;
    }

    public String getErscheinungsdatum() {
        return erscheinungsdatum;
    }

    public void setErscheinungsdatum(String erscheinungsdatum) {
        this.erscheinungsdatum = erscheinungsdatum;
    }

    public boolean equals(Medien other) {
        if(this.id == other.id) {
            return true;
        }else {
            return false;
            }
        }

    public  void anzeigen()
    {
        System.out.println("\n"+"-----------------------------------------"+"\n"+"\n"+"[Medium]:"+"\n"+ "ID -->                " + this.getId() + "\n"+ "Name -->              " + this.getName() + "\n"  + "Kommentar -->         " + this.getKommentar()+ "\n"  + "Erscheinungsdatum --> " + this.getErscheinungsdatum());
    }

    public void entfernungsBeschreibung() {
        System.out.println("ID, Name, Typ -->     " + this.getId()+ ", " + this.getClass() + ", "+ this.getName());
    }
}

2 个答案:

答案 0 :(得分:0)

您可以在静态方法中为成员使用不同的谓词,并在过滤时使用它们。请注意,对于前两个,我同时包含等于和包含,这取决于您要如何进行搜索,当然可以实现两个版本。

在Medien类中:

public static Predicate<Medien> nameFilter(String name) {
    //return m -> m.getName().equals(name);
    return m -> m.getName().contains(name);
}

public static Predicate<Medien> kommentar Filter(String kommentar) {
    //return m -> m.getKommentar().equals(kommentar);
    return m -> m.getKommentar().contains(kommentar);
}

public static Predicate<Medien> erscheinungsdatum Filter(String name) {
    return m -> m.getErscheinungsdatum().equals(erscheinungsdatum);
}

然后像这样使用它们

mb.stream().filter(Medien.nameFilter("Java"));
mb.stream().filter(Medien.kommentarFilter("Alex Pina");

请注意,在您的代码中,mb是一个Medienbibliothek对象,在我的示例中mb是一个ArrayList对象。

答案 1 :(得分:0)

使用Java流进行过滤。

将所有Medien对象存储在originalList中。

List<Medien> originalList = new ArrayList<>();

    Medien m1 = new Filme("Java Wars", "Claudio Landerer", "25.10.2018", 150, true, false);
    Medien m2 = new EBooks("Cloverfield Paradox", "Julius Onah", "25.10.2018", 12345678, 120, 100000);
    Medien m3 = new Filme("Haus des Geldes", "Alex Pina", "01.11.2018", 200, false, true);
    Medien m4 = new EBooks("Poltergeist", "Tobe Hooper", "01.11.2018", 87654321, 175, 100);

   originalList.add(m1);
   originalList.add(m2);
   originalList.add(m3);
   originalList.add(m4);

现在为每种类型的过滤数据创建一个方法。 例如: 要根据名称进行过滤,请使用以下方法。

List<Medien> getListBasedOnName(String name){
  return originalList.stream.filter(value -> 
  value.getName().equals(name)).collect(Collectors.toList());
}

需要为每个需要过滤的属性创建相似的方法。