2015-01-17 1 views
0

의 ArrayList에서 특정 속성 객체를 제거 arraylist에서 발견되면 객체가 제거됩니다.의 I는 세 가지 속성을 가진 고객 개체가

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(); 
     } 
    } 
} 

이 작동하지만, 같은 이름과 성으로 모든 고객을 제거

+0

'compare' 메소드 안에 무엇을 써야할지 생각하기 전에 어디에 놓을 지 생각해보십시오. 힌트 : 다른 방법은 좋은 방법이 아닙니다. – Tom

+0

이 컴파일됩니까? compare 메서드가 deleteCustomer 메서드 안에 있습니까? – Holloway

+0

예, 컴파일됩니다. 원래 방법으로 새 ​​게시물을 업데이트했습니다 – user3479783

답변

1

당신이 질문에 설명 된대로 단순히 하나 고객을 삭제하려면 당신은 올바른 고객을 발견 한 후 루프을 깨고 그것을 제거해야합니다

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

그러나 동일한 첫 번째 + 성을 가진 고객이 여러 명있을 수 있으므로이 알고리즘은 정확히 방탄하지 않습니다. 어쩌면 고객 ID 또는 이와 유사한 것이 고객을 구별하는 데 사용되어야합니다. 고객 ID의 경우 사용할 데이터 구조는 아마도 Map<CustomerId, Customer>이어야합니다. 고객은 ID를 통해 신속하게 액세스 할 수 있으며 values() 메소드를 호출하여 모든 고객의 콜렉션을 검색 할 수 있습니다. 이 외에도

, 당신은 또한 자바 (8) 구조 당신 stream, filtercollect 데이터를 사용할 수있는 원래의 List을 수정하지 않으려면.

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

List 위의 원래 List에서 해당 항목 첫번째 +의 LASTNAME 경기를 제외하고 모두 포함되어 있습니다.

+0

고객마다 고유 한 SIN 번호가 있습니다. 그것들을 구별하기 위해 여전히 Map <>을 구현해야합니까? – user3479783

+0

@ user3479783 키가'SIN' 인 경우'Map '를 사용하십시오 (좋은 aproach). 또는 첫 번째 + 성 대신 'SIN'을 기반으로 고객을 삭제할 수 있습니다. – wassgren

관련 문제