[英]Java - Search and Delete an object from Arraylist
因此,我有Customer類和Bank類,bank類具有將Customer添加到Customer的數組列表中的方法,並且還必須具有在arraylist中搜索Customer並將其刪除(從arraylist中刪除)的方法。 ?
銀行類-
private ArrayList<Customer> customers = new ArrayList<>();
public void addCustomer(String name){
Customer customer = new Customer(name);
customers.add(customer);
System.out.println("new customer " + customer.getName() + " added");
}
public void deleteAccount(String name){
}
客戶類別-
private String name;
private double balance;
public Customer(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Customer " +
"name :'" + name + '\'' +
'}';
}
主-
public static void deleteAccount(){
System.out.println("Enter the name you want to delete");
String name = scanner.nextLine();
scanner.nextLine();
bank.deleteAccount(name);
}
如您所見,主類具有從用戶接受輸入類型String的方法,然后使用該輸入調用Bank類的deleteAccount方法,但是我不知道如何繼續deleteAccount方法,如何使其工作?
我需要一些東西,首先檢查用戶輸入是否在Arraylist中,然后從那里刪除它。
我確實意識到輸入是String,而Arraylist是Customer實例,但是Customer只在承包商中使用String名稱,那么我可以這樣工作嗎?
我建議使用HashMap對象而不是ArrayList。 HashMap將一組鍵(在您的情況下為客戶名稱)映射到一組對象(客戶)
HashMap<String,Customer> customers = new HashMap<String,Customer>();
在addCustomer中,您可以執行this.customers.put(name,customer)
;在刪除帳戶中,您可以執行this.customers.remove(name)
否則,您可以按照蒂莫西(Timothy)的建議遍歷列表,但這是更自然,更有效的方法
遍歷列表,檢查提供的名稱是否等於列表中從客戶檢索的名稱,如果是,則將其刪除。
public void deleteAccount(String name){
Iterator<Customer> itr= customers.iterator();
while(itr.hasNext()){
String cuName = itr.next().getName();
if(cuName.equalsIgnoreCase(name)){
//delete it from list
//break out of loop
itr.remove();
break;
}
}
}
按名稱刪除帳戶是不正確的方法。 因為有多個同名客戶的機會。 因此,刪除帶有帳號的帳號是正確的選擇。
仍然要按客戶名稱刪除帳戶,然后檢查以下內容:
Customer custToDelete = null;
for(Customer customer:customers){
if(customer.getName().equals(name))
custToDelete = customer;
}
if(custToDelete==null)
System.out.println("No customer found");
else
customers.remove(custToDelete);
我更喜歡使用Map,因此刪除/存在將在O(1)中而不是O(n)中
public class Bank {
private Map<String,Customer> customers = new HashMap<>();
public void addCustomer(String name){
Customer customer = new Customer(name);
customers.put(customer.getName(),customer);
System.out.println("new customer " + customer.getName() + " added");
}
// O(1) -- no need to iterate over an array for deleting customer
public boolean deleteAccount(String name){
if(customers.containsKey(name)){
customers.remove(name);
return true;
}
return false;
}
@Override
public String toString() {
return "Bank{" +
"customers=" + customers +
'}';
}
public static void main(String[] args){
Bank bank = new Bank(); // create Bank object
bank.addCustomer("Jhon"); // insert some customer
bank.addCustomer("Doe");
System.out.println(bank);
bank.deleteAccount("Yossi"); // not exists - return false
bank.deleteAccount("Doe"); // removed - return true
System.out.println(bank);
}
}
希望這個幫助...
刪除Java 8:
Optional<Customer> customerToDelete = customers.stream().filter(cust->cust.getName().equals(name)).findFirst();
if(customerToDelete.isPresent()){
customers.remove(customers);
}else{
System.out.println("Customer does not exist");
}
順便說一句。 我認為您應該檢查“ addCustomer”是否已存在具有給定名稱的客戶...類似
customers.stream().filter(cust->cust.getName().equals(name)).count()
應該可以
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.