判斷2個list中是否有相同的數據(相交)Collections.disjoint

羣裏一個老哥的問題:

請教一個問題,兩個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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章