为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千万里不及你 2021-12-30 17:26:27
这是我的班级 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());    }}
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

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


在媒体类中:


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对象。


查看完整回答
反对 回复 2021-12-30
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

使用 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());

}

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


查看完整回答
反对 回复 2021-12-30
  • 2 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号