簡體   English   中英

將類的新實例添加到arraylist中的元素

[英]Add new instance of class to element in arraylist

我將嘗試使我的問題盡可能清楚,所以這里有一些背景知識。 基本上,我想將各種不同的類(客戶端,地址,電話等)一起存儲在客戶端的ArrayList中。 我的Client構造函數包括名稱字符串,Address實例和Phone的另一個實例。 然后將客戶端添加到ArrayList中。

我想要做的是通過首先在列表中搜索客戶端的名稱,然后使用一種方法添加另一個Phone(描述和號碼)而無需添加另一個Phone實例到ArrayList中的現有Client元素。覆蓋現有電話。

//method I'm working on to achieve adding a new Phone

public void addTelephoneNr(){
        System.out.println("Namn of customer to add new phone number to: ");
        String nameIn = scr.next();
        for (int a = 0 ; a<arrayClient.size() ; a++){   
            if(arrayClient.get(a).getNameClient().equalsIgnoreCase(nameIn)){
                Phone newPhone = new Phone();
                newPhone.setPhone();
            }
    }

客戶的構造函數:

public Client(String nameClient, Address addressClient, Phone phoneClient){
        this.nameClient = nameClient;
        this.addressClient = addressClient;
        this.phoneClient = phoneClient;
    }

如果我沒有太大的道理,我將嘗試回答我自己沒有想到的問題。

您沒有指定Client類是否具有適當的成員來存儲多個電話。 如果是這樣,請定義一個addPhone方法,並在您的循環中調用它:

        if(arrayClient.get(a).getNameClient().equalsIgnoreCase(nameIn)){
            Phone newPhone = new Phone();
            newPhone.setPhone();
            arrayClient.get(a).addPhone(newPhone);
        }

如果客戶可以擁有多個電話號碼,我將使用電話號碼列表,而不是一個電話號碼列表:

private List<Phone> phoneNumbers;

public Client(String nameClient, Address addressClient, Phone phoneClient){
        this.nameClient = nameClient;
        this.addressClient = addressClient;
        this.phoneNumbers = new ArrayList<>();
        this.phoneNumbers.add(phoneClient);
}

public void addPhoneNumber(Phone phoneClient){
        this.phoneNumbers.add(phoneClient);
}

然后在循環中使用該addPhoneNumber()方法。

假設您的列表僅包含Client對象,則只需查找給定名稱的客戶端並添加數字即可:

class Client {
    private List<PhoneNumber> phoneNumbers;
    private String name;
    public boolean hasName(String name) {
        return this.name.equals(name);
    }
    public addNumber(PhoneNumber phoneNumber) {
        phoneNumbers.add(phoneNumber);
    }
}

List<Client> clients;

public void addNumberToClient(String name, PhoneNumber phoneNumber) {
    clients.stream()
        .filter(client -> client.hasName(name))
        .forEach(client -> client.addNumber(phoneNumber));
}

這會將號碼添加到具有給定名稱的所有客戶端(如果它們應該是唯一的,則應在添加客戶端時對其進行檢查,您可以使用.findFirst().ifPresent(...)代替.forEach(...) )。

如果列表中還包含其他類,則會變得更加復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM