羣裏一個老哥的問題:
請教一個問題,兩個List,一個是服務端數據,一個是本地數據,如何判斷本地數據中沒有包含服務端的數據,因爲每次請求服務器,服務端返回的List是一個新的內存地址,所以本地List.contains() 方法無效,我應該怎麼比對----這是很常見的問題
有人回答重寫實體類,equals方法,有人回答挨個取出來對比。
有人提到 Collections.disjoint方法,沒錯。這個確實是最簡單的辦法
private void initData() {
for (int i = 0; i < 5; i++) {
Student student = new Student();
student.setAge(i + 50);
student.setName("小明" + i);
student.setSex("男");
list1.add(student);
}
list1.add(new Student("小雞雞" , 18 , "男"));
for (int i = 0; i < 15; i++) {
Student student = new Student();
student.setAge(i);
student.setName("小菇涼");
student.setSex("女");
list2.add(student);
}
list2.add(new Student("小雞雞" , 18 , "男"));
if(Collections.disjoint(list1 , list2)){
Toast.makeText(this,"有相交數據", Toast.LENGTH_SHORT).show();
tv1.setText("list1:\n" + list1.toString() + "\n" + "list2:\n" + list2.toString() + "\n" + "有相交數據");
}else {
Toast.makeText(this,"沒有沒有沒有沒有相交數據", Toast.LENGTH_SHORT).show();
tv1.setText("list1:\n" + list1.toString() + "\n" + "list2:\n" + list2.toString() + "\n" + "無相交數據");
}
}
輸出結果:
下面看一下源碼:
可以看到,他的核心就是5406行。遍歷小的list,取出每一個bean。然後循環判斷該bean是否在大的list裏面。
最終的道理還是挨個取出來遍歷,只是做了很多的兼容處理和優化。
非常棒的Api