Chciałbym sprawdzić, czy dwa pakiety są równe, czy jest jakiś sposób to zrobić, zamiast sprawdzać klucz po klawiszu?Sprawdź, czy dwa obiekty pakietu są równe w systemie Android?
Odpowiedz
Oto jeden sposób, aby sprawdzić, czy dwie wiązki są takie same:
- Sprawdź swoje rozmiary, nie przejmuj się, jeśli nie są one równe
- Jeśli obie wartości są Bundle obiekty używające rekurencji
- Ponieważ wartość dla klucza w
one
może byćnull
, upewnij się, że obie wartości sąnull
i że kluczem faktycznie istnieje wtwo
- Wreszcie porównać wartości
Kod:
public boolean equalBundles(Bundle one, Bundle two) {
if(one.size() != two.size())
return false;
Set<String> setOne = new HashSet<>(one.keySet());
setOne.addAll(two.keySet());
Object valueOne;
Object valueTwo;
for(String key : setOne) {
if (!one.containsKey(key) || !two.containsKey(key))
return false;
valueOne = one.get(key);
valueTwo = two.get(key);
if(valueOne instanceof Bundle && valueTwo instanceof Bundle &&
!equalBundles((Bundle) valueOne, (Bundle) valueTwo)) {
return false;
}
else if(valueOne == null) {
if(valueTwo != null)
return false;
}
else if(!valueOne.equals(valueTwo))
return false;
}
return true;
}
Świetna metoda, może również zadeklarować to jako 'static'. Następnie umieść go w klasie utils, jeśli twój projekt go dużo używa. – Jon
To również powinno wykonać zerową kontrolę pakietów przed wywołaniem bundle.size(), aby uniknąć NPE. – Chris6647
Jeśli obie wartości są 'bundle' i równe, to nadal jest wywoływany test' if (! ValueOne.equals (valueTwo)) ', który jest niepoprawny. –
private static boolean equalsBundles(Bundle a, Bundle b) {
Set<String> aks = a.keySet();
Set<String> bks = b.keySet();
if (!aks.containsAll(bks)) {
return false;
}
for (String key : aks) {
if (!a.get(key).equals(b.get(key))) {
return false;
}
}
return true;
}
Ja testowałem Sam „Klawisze Dopasowany s odpowiedź i zawiera wadę. Poza tym kocham w tej chwili Kotlina, więc oto moja wersja.
- Ponownie zestawy klucze muszą być tej samej wielkości
- Kluczowe zestawy muszą mieć te same wartości
- Jeżeli obie wartości są
Bundle
następnie przetestować rekurencyjnie. - Inaczej wartości testowe dla równości (nie ponownie przetestować zestawy)
Kod:
fun equalBundles(one: Bundle, two: Bundle): Boolean {
if (one.size() != two.size())
return false
if (!one.keySet().containsAll(two.keySet()))
return false
for (key in one.keySet()) {
val valueOne = one.get(key)
val valueTwo = two.get(key)
if (valueOne is Bundle && valueTwo is Bundle) {
if (!equalBundles(valueOne , valueTwo)) return false
} else if (valueOne != valueTwo) return false
}
return true
}
- 1. Sprawdź, czy dwa obiekty są całkowicie równe w Javie
- 2. Kakao: Sprawdź, czy dwa NSArrays są równe
- 3. Sprawdź, czy dwa typy ogólne są równe
- 4. Sprawdź, czy dwie funkcje std :: są równe
- 5. Czy istnieje sposób sprawdzenia, czy dwa elementy DOM są równe?
- 6. Dlaczego dwa równe obiekty wyświetlają "nie równy" w Angular 2
- 7. Kiedy inicjalizowane są obiekty pakietu?
- 8. Sprawdź, czy dwa std :: wektory są równe przy użyciu CATCH C++ w ramach testu jednostkowego
- 9. Sprawdź, czy dwa elementy są takie same
- 10. Czy dwa równe zdarzenia jQuery .on są wiązane dwukrotnie?
- 11. Sprawdź, czy wszystkie wartości są równe na liście:
- 12. Jeśli dwie rzeczy nie są równe, czy są równe?
- 13. Sprawdź, czy dwa napisy są podobne w JavaScript?
- 14. W jaki sposób dwa identyczne ciągi nie są sobie równe?
- 15. Ustal, czy dwa obiekty Java są tej samej klasy
- 16. W jaki sposób zestaw Pythona ([]) sprawdza, czy dwa obiekty są równe? Jakie metody musi zdefiniować obiekt, aby go dostosować?
- 17. jQuery obiekty tego samego elementu nie są równe?
- 18. Format pakietu BLE w systemie Android
- 19. Czy możliwe jest programowe odinstalowanie pakietu w systemie Android?
- 20. Czy obiekty tablicy wierzchołkowej są obsługiwane w systemie Android OpenGL ES 2.0 z rozszerzeniami?
- 21. Dwie identyczne daty JavaScript nie są równe
- 22. Jak określić, czy dwa HashSety są równe (według wartości, a nie według odwołania)?
- 23. Jak debugować dwa procesy w systemie Android?
- 24. jquery scalić dwa obiekty
- 25. Jak scalić dwa obiekty?
- 26. Jak porównać dwa obiekty Java
- 27. Czy można rozpoznać, czy dwa obiekty są takie same w debugerze Chrome?
- 28. Sprawdź, czy dwie niezliczone tablice są (zbliżone do) sobie równe, w tym kształt
- 29. Core Data łączy dwa obiekty zarządzane obiekty
Nie będzie to działać? http://developer.android.com/reference/java/lang/Object.html#writing_equals – Simon
Nie można przesłonić 'Bundle', ponieważ jest to' final'. – pixel
Ach, dobry punkt :) – Simon