Сделайте поле объекта уникальным для каждого объекта, хранящегося в списке массивов - PullRequest
0 голосов
/ 07 мая 2020

Итак, у меня есть список массивов, в котором хранятся клиенты, и мне было поручено сделать так, чтобы ни у одного клиента не было того же идентификатора

в коде есть метод записи, который записывает текстовый файл всех клиентов, так что я было поручено, когда код закрыт, и клиенты были записаны в файл, когда код повторно открыт, и новые клиенты создаются и добавляются в список, ни один из них не может иметь тот же идентификатор, что и тот, кто уже находится в списке из предыдущее сохранение клиентов

Вот код:

Это данные записи для текстовых файлов клиентов

public void writeCustomerData(String fileName)
throws FileNotFoundException
{
    PrintWriter pw = new PrintWriter(fileName);
    for (Customer c: customerList)
    {
        String lineOfOutput = c.getCustomerID() + ", " + c.getTitle() + ", " + c.getFirstName() + ", " + c.getSurname() + ", " + c.getInitials();
        pw.println(lineOfOutput);
    }
    pw.close();
}

Это конструктор для добавления новых клиентов

public Customer(String nSurname, String nFirstName, String nOtherInitials, String nTitle)
{
    customerID = "unknown";
    surname = nSurname;
    firstName = nFirstName;
    otherInitials = nOtherInitials;
    title = nTitle;
}

Это код, который сохраняет клиентов в arrayList

public void storeCustomer(Customer customer)
{
    if (customer.getCustomerID().equalsIgnoreCase("unknown"))
    {
        customer.generateCustomerID("AB", 5);
    }
    customerList.add(customer);
}

Это код, который генерирует идентификаторы

public void generateCustomerID(String prefix, int length)
{
    Random random = new Random();
    int rand = 0;
    for (int i = 0; i < length; i++)
    {
        rand = random.nextInt(10);
        prefix = prefix + Integer.toString(rand);

    }
    setID(prefix);
}

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Создание случайного идентификатора, возможно, не лучшее решение в этом случае. Попробуйте что-нибудь вроде

String uniqueID = UUID.randomUUID().toString();

Он генерирует полностью случайную строку.

Если вам действительно нужно просто случайное, лучше использовать ThreadLocalRandom.current().nextInt()

0 голосов
/ 07 мая 2020

Если я правильно понимаю, что вам нужно достичь, вам нужно использовать Set ( «Коллекция, не содержащая повторяющихся элементов» ), чтобы избежать дублирования.

Итак, каждый раз, когда вы запускаете код, вы должны читать все строки из файла, создавать клиента и сохранять его в Set. С Set, когда вы вызываете customerList.add(customer), Set сам позаботится о том, чтобы избежать добавления дубликатов. Установите использование методов equals и hashCode, чтобы проверить, есть ли Custom уже в Set, поэтому обязательно правильно реализуйте эти методы.

...