Czy istnieje mechanizm Equalatora, taki jak Komparator, więc mogę mieć różne wartości dla list współdziałających?Mechanizm dla różnych równań (fizyczne równe i logiczne równe) na obiektach w kolekcji
EDIT: Moim celem jest, aby odróżnić bieżących list1.equals (lista2), który sprawdza jeśli jego kopia lub płytkie również głęboka kopia ze wszystkich obiektów a.equals (b) i list1.identical (lista2), który sprawdza, czy jest to po prostu płytka kopia z niezmodyfikowanym wykazem. Wszystkie te listy pochodzą z tego samego modelu. Niektóre z nich są kopiami samych siebie, więc posiadają wskaźnik do tych samych obiektów, a inne są kopiami głębokimi, więc hierarchia jest całkowicie powielana, ponieważ mają one aktualizacje w treści, a nie tylko w strukturze.
Często znajduję się na liście list1.equals (list2), ale potrzebuję mechanizmu informującego, czy oba są kopiami TOTAL (te same obiekty w tej samej kolejności dla kolekcji), czy czasem, jeśli są to kopie LOGICZNE (przez moją własną zaimplementowaną logikę jest równa), więc lista wywoła równe wartości, a obiekty powinny zaimplementować coś więcej niż a == b.
Moim problemem jest brak połączenia Equalator, a jeśli zastąpić obiektów wynosi stracę możliwość porównywania przez całkowite równe (a == b)
Dla przykładu, to byłoby miło;
Collections.equal(l1,l2,new Equalator(){
@Override public boolean equals(Obj1,Obj2){
//Default lists comparison plus commparison of objects based on
return (obj1.propertyX() == obj2.propertyX());
}
});
i jeszcze mógłbym zrobić list1.equals (lista2), więc używać domyślnych equals (obj1 == obj2) i byłoby to prawdą, jeśli tylko zawarte obiekty są dokładnie takie same.
Pierwsza operacja jest przydatna do sprawdzenia, czy lista (która może być zaktualizowaną listą z całkowicie odtworzonymi obiektami z modelu) nadal jest równa starej liście.
Druga operacja jest przydatna do sprawdzenia, czy lista (która była płytką kopią starej bieżącej wersji modelu danych), nie zawiera żadnej transcendentnej zmiany z przeniesienia jej wewnątrz kodu, gdy była to udpdated wersja.
EDYCJA: Bardzo dobrym przykładem może być lista punktów (x, y). Powinniśmy wiedzieć, czy obie listy są równe, ponieważ są dokładnie tym samym zbiorem punktów lub równe, ponieważ punkty, które zawierają, są równe w logiczny sposób. Gdybyśmy mogli zaimplementować zarówno phyEqual, jak i logEqual do obiektu, i mieć obie metody w dowolnym obiekcie, tak więc list.phyEqual (list2) lub list1.logEqual (list2)
Masz dużo kontekstu, ale jakie jest twoje aktualne * pytanie * tutaj? –
Pierwsza linia. Następnie definiuję swój problem. Przepraszam, zacząłem od 'isn't there' zamiast 'is there' i myślę, że to dlatego jego myląca lista co najmniej – Whimusical