今天在做金碟系统与我们系统的对接的时候需要做一个客户同步

在同步时,需要比较对象,对查询出的数据库的数据进行比较

for(int i=0;i<list2.size();i++){
if(! list1.contains(list2.get(i))){
//把对应的对象加入到返回的结果集List中去就可以了
List l = new ArrayList();
l.add(list2);
System.out.println(l.toString());
}
}

但是返回值总是false,在网上看到答案:需要在entity中重写equals方法:

    ArrayList的contains方法
java
今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放Student类的ArrayList 但在调用list.contains(user)时总是返回false。 去看了下ArrayList的源码,源码如下:
Java代码
public boolean contains(Object o) {
return indexOf(o) >= 0;
} public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
[java] view plaincopy
public boolean contains(Object o) {
return indexOf(o) >= 0;
} public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
} 发现在contains方法会调用 o.equals(elementData[i])方法,其中elementData[i]是个object类的实例。也就是说我在调用list.contains(user)时实际上比较的是user.equals(object) 这当然会返回false。 正确的方法,在Student类中改写equals方法。 改写的代码如下:
Java代码
public boolean equals(Object obj) {
if (obj instanceof Student) {
Student u = (Student) obj;
return this.name.equals(u.name)
&& this.id.equals(id);
}
return super.equals(obj);

将需要对比的数据写到equals方法中,没写进去不比较,其他字段不同contains还是返回true,像这样:

Entity:

public class Student {
private Integer id;
private String name;
private Integer isBack;
// ......
public boolean equals(Object obj) {
if (obj instanceof Student) {
Student u = (Student) obj;
return this.name.equals(u.name)
&& this.id.equals(id);
}
return super.equals(obj);
}
}
    public static void main(String[] args) {
List<Student> list1 = new ArrayList<Student>(); Student s = new Student();
s.setId(1);
s.setName("1");
list1.add(s); List<Student> list2 = new ArrayList<Student>();
Student student2 = new Student();
student2.setId(1);
student2.setName("1");
student2.setIsBack(1);
list2.add(student2); Student student3 = new Student();
student3.setId(1);
student3.setName("22");
student3.setIsBack(213123123);
list2.add(student3); for(int i=0;i<list2.size();i++){
if(! list1.contains(list2.get(i))){
//把对应的对象加入到返回的结果集List中去就可以了
List l = new ArrayList();
l.add(list2);
System.out.println(l.toString());
}
}
}

但是在重写equals方法的时候,如果一个值为null,就会报空指针异常,所以可以在重写equals方法的时候将equals改为 ==

public boolean equals(Object obj) {
if (obj instanceof Student) {
Student u = (Student) obj;
return this.name==(u.name)
&& this.id==(id);
}
return super.equals(obj);
}

执行效果:

public static void main(String[] args) {
List<Student> list1 = new ArrayList<Student>(); Student s = new Student();
s.setId(1);
s.setName("1");
list1.add(s); List<Student> list2 = new ArrayList<Student>();
Student student2 = new Student();
student2.setId(1);
student2.setIsBack(1);
list2.add(student2); Student student3 = new Student();
student3.setId(1);
student3.setName("111");
student3.setIsBack(213123123);
list2.add(student3); for(int i=0;i<list2.size();i++){
if(! list1.contains(list2.get(i))){
//把对应的对象加入到返回的结果集List中去就可以了
List l = new ArrayList();
l.add(list2);
System.out.println(l.toString());
}
}
}

List集合中的对象比较,取出不同对象的更多相关文章

  1. 使用LinkedList类生成一个集合对象,循环加入“小样1”,“小样2”,“小样3”,“小样4”,“小样5”……“小样100”。输出这个集合的大小。再使用循环删除这个集合中所有名字为偶数的对象,比如“小样6”,“小样100”,都是偶数名。最后:循环输出集合中所有的对象,看是否删除成功。

    package com.lanxi.demo1_8; import java.util.Iterator; import java.util.LinkedList; public class Test ...

  2. Map集合中value()方法与keySet()、entrySet()区别

    http://blog.csdn.net/liu826710/article/details/9001254 在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, ...

  3. map集合中value()、keySet()、entrySet()区别

    在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet():将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键, ...

  4. Map集合中value()方法与keySet()、entrySet()区别 《转》

    在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet(): 将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键 ...

  5. 牛客网Java刷题知识点之泛型概念的提出、什么是泛型、泛型在集合中的应用、泛型类、泛型方法、泛型接口、泛型限定上限、泛型限定下限、 什么时候使用上限?泛型限定通配符的体现

    不多说,直接上干货! 先来看个泛型概念提出的背景的例子. GenericDemo.java package zhouls.bigdata.DataFeatureSelection; import ja ...

  6. Map集合中的方法

    Map集合中的方法: values() 方法 : 获取集合中的所有的值----没有键,没有对应关系, KeySet() 方法: 将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代 ...

  7. 后端list集合中的数据传递到前台HTML中显示(表格形式)

    关键字:web项目中前后台数据传递问题 在学习web项目的过程中,我们肯定会遇到前后台数据交换问题.这个问题我也思考了很久,今天借此总结一下.由于博主水平有限,如有不当之处,还请大家多多指正,,废话不 ...

  8. java8 从对象集合中取出某个字段的集合

    public class FeildTest { public static void main(String[] args) { //定义list集合 List<P> list = Ar ...

  9. java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。

    import java.util.*; /* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素. 比如:存人对象.同姓名同年龄,视为同一个人.为重复元素. 思路: 1,对人描述,将数据 ...

  10. 使用Properties集合存储数据,遍历取出Properties集合中的数据和Properties集合中的方法store和load

    package com.yang.Test.PropertiesStudy; import java.io.FileWriter; import java.io.IOException; import ...

随机推荐

  1. 会话cookie中缺少HttpOnly属性 解决

    会话cookie中缺少HttpOnly属性 解决   只需要写一个过滤器即可 1 package com.neusoft.streamone.framework.security.filter; 2 ...

  2. Shell脚本批量修改图片尺寸

    #!/bin/sh function scandir(){ local cur_dir parent_dir workdir workdir=$ cd ${workdir} if [ ${workdi ...

  3. 再学UML-UML用例建模解析(三)

    2. 编写用例文档 绘制用例图只是完成了用例建模最基本也是最简单的一步,用例建模的核心在于编写用例文档,用例文档又称为用例规约或用例描述.顾名思义,用例文档是用于描述用例的文档,每一个用例对应于一个用 ...

  4. Sticky footers 套路

    [CSS Secrets] http://shop.oreilly.com/product/0636920031123.do 以饿了么商家信息的弹出层为例,布局如下: <!-- 饿了么 弹出层部 ...

  5. delphi7 打开project/options 出错

    出错提示:Access violation at address 0012F88F. Write of address 0012F88F.然后又提示一条:Access violation at add ...

  6. HDU 4117 GRE Words

    这道题不难想到这样的dp. dp[字符串si] = 以si为结尾的最大总权值. dp[si] = max(dp[sj]) ,1.j < i,2.sj是si的子串. 对于第二个条件,是一个多模版串 ...

  7. 宠物商城后台管理系统(springMVC+Mybatis+数据库)

    mysql数据库 create database swager; use swager; #类别 create table Category( id int primary key auto_incr ...

  8. mysql安装下载

    简单介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最 ...

  9. [LuoguP1141]01迷宫

    1141 01迷宫 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务 ...

  10. java容易混淆的的内部类相关概念

    关于内部类: 作用: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内部类所实现的 ...