Java 列表Bean元素去重

在前端和後端交互的過程當中,對於列表類的數據,有時候服務器發來的數據是重複的,這種列表類的數據大多和單元Bean類有聯繫,並且每一個Bean通常都有id,因此,咱們能夠根據id來進行判斷去重,然而怎麼根據id來去重呢?這就須要咱們重寫Bean的equals和hashCode方法來比較了,上代碼吧: 首先咱們定義一個User的Bean類:前端

public class User extends Bean{
    public String id;
    public String name;
    public int age;

    //去重關鍵,重寫equals方法
    @Override
    public boolean equals(Object o) {
        User user = (User) o;
        return user.id.equals(id);
    }

    //去重關鍵,把User的id當作對象的哈希表值返回
    @Override
    public int hashCode() {
        return id.hashCode();
    }
    }
測試代碼:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.example.administrator.test.R;
import com.example.administrator.test.bean.User;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class RemoveDepulicateDataActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_remove_depulicate_data);
        User user1 = new User();
        user1.id = "12";
        user1.name = "aaa";
        user1.age = 10;
        User user2 = new User();
        user2.id = "13";
        user2.name = "aaa";
        user2.age = 11;
        User user3 = new User();
        user3.id = "14";
        user3.name = "aaa";
        user3.age = 11;
        User user4 = new User();
        user4.id = "15";
        user4.name = "aaa";
        user4.age = 11;
        User user5 = new User();
        user5.id = "15";
        user5.name = "aaa";
        user5.age = 11;
        List<User> list = new ArrayList<>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);
        list.add(user5);
        remove(list);
        Log.e("after del depulicate",list.size()+"");
    }

    //去Bean類重
    public void remove(List<User> list){
        Log.e("before del depulicate",list.size()+"");
        Set<User> set = new HashSet<>();
        List<User> listaaa = new ArrayList<>();
        for (Iterator<User> ite = list.iterator();ite.hasNext();){
            User aaa = ite.next();
            if (set.add(aaa)){
                listaaa.add(aaa);
            }
        }
        list.clear();
        list.addAll(listaaa);
    }

}
經過以上代碼咱們能夠知道,HashSet的判重是根據元素的hashCode方法和equals方法共同決定的.送你們一片文章來溫習下,hashCode和equals的原理.

hashcode()和equals()及HashSet判斷對象相等java

新增android

另外一種的去重方式:
```
public void removeDepulicate(List list) {
    for  ( int  i  =   0 ; i  <  list.size()  -   1 ; i ++ )   {
        for  ( int  j  =  list.size()  -   1 ; j  >  i; j -- )   {
            if  (((DialogueBean) list.get(j)).getId().equals(((DialogueBean) list.get(i)).getId()))   {
                list.remove(j);
            }
        }
    }
}
```
相關文章
相關標籤/搜索