每天早上七点三十,准时推送干货
一、问题由来
在实际开发的时候,我们经常会碰到这么一个困难:一个集合容器里面有很多重复的对象,里面的对象没有主键,但是根据业务的需求,实际上我们需要根据条件筛选出没有重复的对象。
比较暴力的方法,就是根据业务需求,通过两层循环来进行判断,没有重复的元素就加入到新集合中,新集合中已经有的元素就跳过。
操作例子如下,创建一个实体对象PenBean
,代码如下:
/**
* 笔实体
*/
public class PenBean {
/**类型*/
private String type;
/**颜色*/
private String color;
//... 省略 setter 和 getter
public PenBean(String type, String color) {
this.type = type;
this.color = color;
}
@Override
public String toString() {
return "PenBean{" +
"type='" + type + '\'' +
", color='" + color + '\'' +
'}';
}
}
测试 demo,如下:
public static void main(String[] args) {
//添加信息,PenBean中没有主键
List<PenBean> penBeanList = new ArrayList<PenBean>();
penBeanList.add(new PenBean("铅笔","black"));
penBeanList.add(new PenBean("铅笔","white"));
penBeanList.add(new PenBean("铅笔","black"));
penBeanList.add(new PenBean("中性笔","white"));
penBeanList.add(new PenBean("中性笔","white"));
//新数据
List<PenBean> newPenBeanList = new ArrayList<PenBean>();
//传统重复判断
for (PenBean penBean : penBeanList) {
if(newPenBeanList.isEmpty()){
newPenBeanList.add(penBean);
}else{
boolean isSame = false;
for (PenBean newPenBean : newPenBeanList) {
//依靠type、color来判断,是否有重复元素
//如果新集合包含元素,直接跳过
if(penBean.getType().equals(newPenBean.getType()) && penBean.getColor().equals(newPenBean.getColor())){
isSame = true;
break;
}
}
if(!isSame){
newPenBeanList.add(penBean);
}
}
}
//输出结果
System.out.println("=========新数据======");
for (PenBean penBean : newPenBeanList) {
System.out.println(penBean.toString());
}
}
输出结果:
=========新数据======
PenBean{type='铅笔', color='black'}
PenBean{type='铅笔', color='white'}
PenBean{type='中性笔', color='white'}
一般处理数组类型的对象时,可以通过这种方法