0

我有一个具有三个属性的客户对象:姓氏、名字和 SIN 号

如果用户输入客户的姓氏和名字,并且在 arraylist 中找到了该对象,则该对象将被删除。

private static void deleteCustomer (String lastName, String firstName, List<Customer> accounts)
{
    for (int i = 0; i < accounts.size(); i++)
    {            
        accounts.get(i);
        public int compare (Customer c1, Customer c2) 
        {
            Customer customerOne = (Customer) c1;
            Customer customerTwo = (Customer) c2;
            if (lastName.equals(CustomerOne.getLastName()) && firstName.equals(CustomerOne.getFirstName()))
            {

            }
        }
    }
}

如果两个客户的名字和姓氏相同,则要求用户输入 SIN 号,这就是我有比较方法的原因。我不知道在这之后该怎么做。

更新方法:

public static void deleteCustomer (String lastName, String firstName, List<Customer> accounts)
{
    for (Iterator<Customer> iterator = accounts.iterator(); iterator.hasNext();)
    {
        Customer customer = iterator.next();
        if(lastName.equals(customer.getLastName()) && firstName.equals(customer.getFirstName()))
        {
            iterator.remove();
        }
    }
}

这有效,但它会删除所有具有相同名字和姓氏的客户

4

1 回答 1

1

如果您只是想删除一个客户,如问题中所述,您应该在找到正确的客户并将其删除后中断循环:

iterator.remove();
break; // breaks the loop

但是,由于似乎可能有多个客户具有相同的名字+姓氏,因此该算法并不完全是防弹的。也许应该使用客户 ID 或类似名称来区分客户。在客户 ID 的情况下,要使用的数据结构很可能应该是Map<CustomerId, Customer>. 然后可以通过 id 快速访问客户,您仍然可以通过调用该values()方法来检索所有客户的集合。

除此之外,如果您不想修改原始文件,List您还可以使用 Java 8 构造 where youstream和your data.filtercollect

final List<Customer> newAccountList = accounts.stream()
            .filter(c -> !(Objects.equals(c.getFirstName(), firstName) &&
                    Objects.equals(c.getLastName(), lastName)))
            .collect(Collectors.toList());

List上面包含原始的所有内容,除了List名字+姓氏匹配的条目。

于 2015-01-17T19:13:47.777 回答