java - 将 Arraylist 与抽象对象转换

标签 java object inheritance arraylist

大家早上好,

在编写 GUI 时,我遇到了 Arraylist 的问题。 在我的 Vereniging 类中,有一个包含 Persoon 对象的 ArrayList,这些对象是 Lid 或 Medewerker。 现在我需要的是从该列表中过滤所有 Lid 对象,并使用 Lid 对象创建一个新的 Arraylist。 有谁知道这是否可能? 我尝试运行增强的 for 循环并将对象添加到新的 Arraylist,但它说数据类型不符合(尝试将 Persoon 添加到 Lid 列表)

类(class);

维伦尼辛

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;
}

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;
}

最佳答案

您可以使用类型比较运算符: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

关于java - 将 Arraylist 与抽象对象转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50564966/

相关文章:

java - 如何将我的数据库连接放在 .war 文件之外?

c++ - 没有成员可用于声明为类变量的对象

javascript - 如何在javascript中对嵌套对象数组进行排序

java - 扩展 AsyncHTTPClient 添加默认成功回调

java - 继承的方法可以访问Java中的子类字段吗

java - 将资源文件从子模块复制到maven的主模块中

java - 比较Jhipster中的两个集合

php - 使用变量名实例化 PHP 对象时捕获错误

html - 发现哪个 CSS 规则负责任何元素的格式

java - 字符串操作模式