早上好,
在编写GUI时,我遇到了Arraylist的问题。 在我的Vereniging类中,有一个包含Persoon对象的ArrayList,它们是Lid或Medewerker。 现在我需要的是从该列表中过滤掉所有Lid对象,并使用Lid对象创建一个新的Arraylist。 有谁知道这是否可能? 我尝试运行增强的for循环并将对象添加到新的Arraylist但它说数据类型不符合(尝试将Persoon添加到Lid列表)
类;
Vereniging
public class Vereniging {
private String naam;
private ArrayList<Persoon> personen;
private ArrayList<Vliegtuig> vliegtuigen;
private ArrayList<Vlucht> vluchten;
private ArrayList<Hangaar> hangaars;
private DataHandler handler = new Database();
public Vereniging(String naam){
this.naam = naam;
personen = new ArrayList<>();
vliegtuigen = new ArrayList<>();
vluchten = new ArrayList<>();
hangaars = new ArrayList<>();
}
public ArrayList<Persoon> getPersonen() {
return personen;
}
Persoon
public abstract class Persoon implements Comparable<Persoon>{
private String voornaam;
private String tussenvoegsel;
private String achternaam;
private String woonplaats;
private String geslacht;
private String rekeningnr;
Persoon(String voornaam, String tussenvoegsel, String achternaam, String
woonplaats,
String geslacht, String rekeningnr){
this.voornaam = voornaam;
this.tussenvoegsel = tussenvoegsel;
this.achternaam = achternaam;
this.woonplaats = woonplaats;
this.geslacht = geslacht;
this.rekeningnr = rekeningnr;
}
盖
public class Lid extends Persoon {
private String gebnaam;
private String wachtwoord;
private String rol;
public Lid(String voornaam, String tussenvoegsel, String achternaam, String woonplaats, String geslacht,
String rekeningnr, String gebnaam, String wachtwoord, String rol) {
super(voornaam, tussenvoegsel, achternaam, woonplaats, geslacht, rekeningnr);
this.gebnaam = gebnaam;
this.wachtwoord = wachtwoord;
this.rol = rol;
}
答案 0 :(得分:1)
您可以使用类型比较运算符:instanceof
。这使您可以比较变量是否是类(或子类)的实例。
请参阅以下示例,该示例迭代personen
列表,然后使用instanceof
确定它是否实际上是Lid
的实例:
List<Lid> lids = new ArrayList<>();
for(Persoon persoon : personen){
if(persoon instanceof Lid){
// safe cast and add to lids
lids.add((Lid) persoon);
}
}
如果您碰巧使用Java 8,则可以使用新的Stream API:
List<Lid> lids = personen.stream() // create a stream of persoonen
.filter(Lid.class::isInstance) // equivalent to using instanceof
.map(Lid.class::cast) // equivalent to casting
.collect(Collectors.toList()); // creating a list
答案 1 :(得分:1)
正如我所见,您想要将父对象添加到子类型的数组列表中。 因此,当您在遍历persoon列表时,使用 instanceOf 检查persoon的类型,然后键入Lid的大小写并将其添加到新列表中。
希望这能解决您的问题。
更多增强解决方案可以如下。
personen.stream().filter(p->p instanceOf Lid).map(p->(Lid)p).collect(Collectors.toList());
通过使用Java 8的流API,您可以在一行中完成。 谢谢!