![d9088a90c045a460b067e02f173de298.png](https://i-blog.csdnimg.cn/blog_migrate/69b2715814bc1cda067b90e154a62d07.jpeg)
一、问题由来
在实际开发的时候,我们经常会碰到这么一个困难:一个集合容器里面有很多重复的对象,里面的对象没有主键,但是根据业务的需求,实际上我们需要根据条件筛选出没有重复的对象。
比较暴力的方法,就是根据业务需求,通过两层循环来进行判断,没有重复的元素就加入到新集合中,新集合中已经有的元素就跳过。
操作例子如下,创建一个实体对象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()); }}
输出结果:
======&