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

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

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. OpenSUSE 内核编译教程 (kernel 2.6.x)

    http://cn.opensuse.org/OpenSUSE_%E5%86%85%E6%A0%B8%E7%BC%96%E8%AF%91%E6%95%99%E7%A8%8B_(kernel_2.6.x ...

  2. java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z is abstract

    二月 26, 2019 3:47:40 上午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for ...

  3. Linux文件压缩和解压缩命令

    Linux文件压缩和解压缩命令: tar 命令(打包并压缩的话,原文件也会默认存在) -c 建立打包档案 -x 解包 -t 查看包里的类容 -r 向包里追加文件 -v 显示打包过程 -f 文件 比如: ...

  4. May 20th 2017 Week 20th Saturday

    The true nobility is in being superior to your previous self. 真正的高贵在于超越过去的自己. Every night before I w ...

  5. 使用字面量或者绑定变量在HANA Studio里执行SQL语句

    在SAP note 2000002 – FAQ: SAP HANA SQL Optimization里提到了SQL语句的两种执行方式,具体差异体现在where语句里搜索条件的指定方式上. 所谓Lite ...

  6. JAVA程序员常用软件类库下载地址整理

    IT行业是个发展更新特别快的领域,每个程序员在职业生涯中都会经历各类技术和工具的更新迭代. 俗话说:工欲善其事,必先利其器.本着独乐乐不如众乐乐的精神(其实是自己健忘)本人把经常要用到的软件工具官方下 ...

  7. 【luogu P1262 间谍网络】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1262 注意: 1.缩点时计算出入度是在缩完点的图上用color计算.不要在原来的点上计算. 2.枚举出入度时 ...

  8. 【题解】UVA1218 Perfect Service

    UVA1218:https://www.luogu.org/problemnew/show/UVA1218 刷紫书DP题ing 思路 参考lrj紫书 不喜勿喷 d(u,0):u是服务器,孩子是不是服务 ...

  9. SpringBoot非官方教程 | 第六篇:springboot整合mybatis

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-mybatis/ 本文出自方志朋的博客 本文主要 ...

  10. 涉及JSP、Servlet的页面编码问题

    1. JSP页面中,二处的字符编码有何区别 1.<%@ page contentType="text/html;charset=UTF-8" %> 是服务器端java程 ...