Czy Klient wykonuje umowę equals()
?
Jeśli nie implementuje equals()
i hashCode()
, następnie listCustomer.contains(customer)
będzie sprawdzić, czy dokładnie to samo instancja już istnieje na liście (By przykład mam na myśli dokładnie ten sam obiekt - adres pamięci, etc). Jeśli to, czego szukasz, to sprawdzenie, czy ten sam klient (być może to ten sam klient, który ma tę samą nazwę klienta lub numer klienta) jest już na liście, to musisz zastąpić equals()
, aby zapewnić sprawdza, czy odpowiednie pola (np. nazwy klientów) są zgodne.
Uwaga: Nie zapomnij zastąpić hashCode()
, jeśli chcesz zastąpić equals()
! W przeciwnym razie może pojawić się problem z HashMaps i innymi strukturami danych.Aby dobrze zrozumieć, dlaczego tak jest i jakich pułapek należy unikać, warto przyjrzeć się rozdziałom Josh Blocha Effective Java na equals()
i hashCode()
(Link zawiera tylko informacje o tym, dlaczego należy wdrożyć hashCode()
po wdrożeniu equals()
, ale istnieje dobry zasięg jak zastąpić equals()
).
Nawiasem mówiąc, czy w twoim zestawie występuje ograniczenie zamówienia? Jeśli nie ma, nieco łatwiejszy sposób na rozwiązanie tego problemu jest używanie Set<Customer>
tak:
Set<Customer> noDups = new HashSet<Customer>();
noDups.addAll(tmpListCustomer);
return new ArrayList<Customer>(noDups);
Który ładnie usunąć duplikaty dla Ciebie, ponieważ nie pozwalają Zestawy duplikaty. Jednak spowoduje to utratę wszelkich zamówień, które zostały zastosowane do tmpListCustomer
, ponieważ HashSet
nie ma wyraźnego zamówienia (można obejść to za pomocą TreeSet
, ale nie jest to dokładnie związane z pytaniem). To może trochę uprościć twój kod.
nie należy napisać kod jak to w Javie, podobnie jak nie powinieneś pisać własnych procedur sortowania w Javie. Jeśli ma taką możliwość, wbudowaną w coś takiego jak Set, użyj tego. –