我想檢查兩個捆綁是否相等,有沒有辦法做到這一點,而不是按鍵檢查它們?檢查Android中的兩個Bundle對象是否相等?
7
A
回答
28
這裏有一種方法來測試,如果兩束是相同的:
- 檢查它們的大小,不要打擾,如果他們不相等
- 如果兩個值捆紮物體使用遞歸
- 因爲在
one
密鑰的值可以是null
,確保這兩個值是null
和關鍵實際上存在於two
- 最後比較匹配鍵的值
代碼:
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;
}
5
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;
}
0
我已經測試Sam的答案,它含有一個安全漏洞。此外,我現在愛Kotlin,所以這裏是我的版本。
- 再次的按鍵集需要具有相同的尺寸
- 密鑰集需要具有相同的值
- 如果兩個值都
Bundle
然後測試遞歸。 - 否則測試值是否相等(不重新測試包)
代碼:
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. Android檢查Spanned對象是否相等
- 2. 在AS3中,如何檢查兩個JSON對象是否相等?
- 3. 如何檢查兩個json對象在java中是否相等?
- 4. 檢查對象的HashSet是否相等
- 5. 如何檢查兩個文本流對象是否相等
- 6. 檢查兩個位置是否相等
- 7. 檢查兩個「select」是否相等
- 8. 檢查兩個表是否相等
- 9. 檢查兩個向量是否相等
- 10. 檢查對是否相等
- 11. 測試兩個對象是否相等
- 12. 確定兩個對象是否相等
- 13. 檢查兩個對象是否具有浮點值時是否相等?
- 14. 嘗試檢查兩個對象是否等於if子句
- 15. 檢查數組中的至少兩個元素是否相等
- 16. 如何檢查Lua中的兩個值是否基本相等?
- 17. 如何比較C++中的兩個ostream對象是否相等?
- 18. 檢查一個arraylist中兩個連續座標對在java中是否相等
- 19. 如何檢查兩個對象是否相同
- 20. 如何檢查兩個對象(UIButtons)是否相同
- 21. 檢查RoR上的兩個對象之間的相等性
- 22. 如何在JSP中檢查兩個字符串是否相等?
- 23. 檢查兩個n-ary樹在Haskell中是否相等
- 24. 檢查ForeignKeys是否相等
- 25. 如何在xunit.net中測試兩個對象是否相等?
- 26. 如何測試python中兩個對象是否相等?
- 27. 檢查兩個查詢是否相同
- 28. 檢查兩個數字是否相等的最佳方法
- 29. 檢查兩個數組的值是否相等
- 30. 檢查兩個龐大的Python字典是否相等
這是否會無法工作? http://developer.android.com/reference/java/lang/Object.html#writing_equals – Simon
你不能覆蓋'Bundle',因爲它是'final'。 – pixel
啊,好點:) – Simon