自定义类组成的List,去重的方法

现有,自定义类
public class MyBean
{

       private String id ;
       private String username ;
       private String time ;
       private String version ;
}

首先,你需要重写这个类的equals和hashCode方法,如果两个对象的四个属性都一一相等时,视为这两个对象重复。那么,代码如下:
public boolean equals(Object obj)
{
	 if (obj == this)
	{
		   return true ;
	}
	 if (!(obj instanceof MyBean))
	{
		   return false ;
	}
	MyBeanother = (MyBean) obj;
	 return this .id .equals(other .getId()) && this .getUsername().equals(other.getUsername())
				&& this .getVersion().equals(other.getVersion()) && this .getTime().equals(other.getTime());
}

//确保equal的对象,是有相同hashcode的
public int hashCode()
{
	 return (id + version + username + time ).hashCode();
}



然后,通过这行代码,就能对 beanList 去重啦~
beanList = new ArrayList<MyBean>( new LinkedHashSet<MyBean>(beanList));



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你的对象是可以哈希的,那么可以使用 Python 内置的 `set()` 函数来去重。例如,如果你有一个由 `Person` 对象组成的列表,其中每个 `Person` 对象都有一个唯一的 `id` 属性,你可以这样做: ```python class Person: def __init__(self, id, name): self.id = id self.name = name people = [ Person(1, 'Alice'), Person(2, 'Bob'), Person(3, 'Charlie'), Person(1, 'Alice') # 这个对象和第一个对象 id 属性相同 ] unique_people = list(set(people)) print(unique_people) ``` 这个程序会输出: ``` [<__main__.Person object at 0x7f9a4d7c6b50>, <__main__.Person object at 0x7f9a4d7c6b80>, <__main__.Person object at 0x7f9a4d7c6bb0>] ``` 因为 `Person` 对象自定义,所以 `set()` 函数默认不知道如何比较两个 `Person` 对象是否相同。所以输出的是去重后的 `Person` 对象的列表,而不是去重后的 `id` 值的列表。如果你想要比较 `Person` 对象的 `id` 属性,则可以重写 `Person` 的 `__eq__()` 和 `__hash__()` 方法,例如: ```python class Person: def __init__(self, id, name): self.id = id self.name = name def __eq__(self, other): return isinstance(other, Person) and self.id == other.id def __hash__(self): return hash(self.id) ``` 这样,`set()` 函数就可以正确地比较两个 `Person` 对象是否相同了。现在,再运行上面的程序,输出就会变成: ``` [<__main__.Person object at 0x7f9a4d7c6b50>, <__main__.Person object at 0x7f9a4d7c6bb0>, <__main__.Person object at 0x7f9a4d7c6b80>] ``` 可以看到,第一个和第四个 `Person` 对象被认为是相同的,只有两个 `Person` 对象去重了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值