猿问

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

这是我的班级 Kommandozeilenmenü。在其中,我从 Medien 类型创建了一个 ArrayList。我还创建了一个扫描仪来跟踪用户输入。Medien 是 EBooks 和 Filme 的超类,因为它们非常相似。我的任务是根据用户输入过滤 ArrayList。用户输入可以是对象媒体中的任何字段。这是 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());

    }

}


千万里不及你
浏览 163回答 2
2回答

萧十郎

您可以在静态方法中为您的成员设置不同的谓词,并在过滤时使用它们。请注意,对于前两个,我包含了 equals 和 contains,这取决于您想要搜索的方式,您当然可以实现这两个版本。在媒体类中:public static Predicate<Medien> nameFilter(String name) {&nbsp; &nbsp; //return m -> m.getName().equals(name);&nbsp; &nbsp; return m -> m.getName().contains(name);}public static Predicate<Medien> kommentar Filter(String kommentar) {&nbsp; &nbsp; //return m -> m.getKommentar().equals(kommentar);&nbsp; &nbsp; return m -> m.getKommentar().contains(kommentar);}public static Predicate<Medien> erscheinungsdatum Filter(String name) {&nbsp; &nbsp; return m -> m.getErscheinungsdatum().equals(erscheinungsdatum);}然后像这样使用它们mb.stream().filter(Medien.nameFilter("Java"));mb.stream().filter(Medien.kommentarFilter("Alex Pina");请注意,在您的代码中mb是一个Medienbibliothek我不知道它是什么的对象,因此在我的示例中mb是一个ArrayList对象。

白衣染霜花

使用 java 流进行过滤。将所有 Medien 对象存储在一个 originalList 中。List<Medien> originalList = new ArrayList<>();&nbsp; &nbsp; Medien m1 = new Filme("Java Wars", "Claudio Landerer", "25.10.2018", 150, true, false);&nbsp; &nbsp; Medien m2 = new EBooks("Cloverfield Paradox", "Julius Onah", "25.10.2018", 12345678, 120, 100000);&nbsp; &nbsp; Medien m3 = new Filme("Haus des Geldes", "Alex Pina", "01.11.2018", 200, false, true);&nbsp; &nbsp; Medien m4 = new EBooks("Poltergeist", "Tobe Hooper", "01.11.2018", 87654321, 175, 100);&nbsp; &nbsp;originalList.add(m1);&nbsp; &nbsp;originalList.add(m2);&nbsp; &nbsp;originalList.add(m3);&nbsp; &nbsp;originalList.add(m4);现在为每种类型的过滤数据创建一个方法。例如:对于基于名称的过滤,有如下方法。List<Medien> getListBasedOnName(String name){&nbsp; return originalList.stream.filter(value ->&nbsp;&nbsp; value.getName().equals(name)).collect(Collectors.toList());}需要为每个需要过滤的属性创建类似的方法。
随时随地看视频慕课网APP

相关分类

Java
我要回答