在arraylist中向元素添加新的类实例

时间:2015-01-14 14:07:31

标签: java arraylist

我将尝试尽可能清楚地表达我的问题,所以这里有一些背景知识。基本上我有各种不同的类(客户端,地址,电话等),我想将它们存储在ArrayList for Client中。我的Client构造函数包括name的字符串以及Address的另一个实例和Phone的另一个实例。然后将客户端添加到ArrayList中。

我希望能够做的是首先在ArrayList中的现有Client元素中添加第二个Phone实例,方法是首先在列表中搜索客户端的名称,然后使用方法添加另一个Phone(描述和数字)而不覆盖现有的电话。

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

如果我没有多大意义,我会尝试回答一些我没想过的问题。

3 个答案:

答案 0 :(得分:0)

您没有指定您的客户端类是否有适当的成员来存储多个电话。如果是,请定义addPhone方法,并在循环中调用它:

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

答案 1 :(得分:0)

如果客户可以拥有多个电话号码,我会使用一个电话号码列表而不是一个电话号码:

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()方法。

答案 2 :(得分:0)

假设您的列表中只包含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(...))。

如果列表中包含其他类,则会更复杂。