List集合中的对象比较,取出不同对象
今天在做金碟系统与我们系统的对接的时候需要做一个客户同步
在同步时,需要比较对象,对查询出的数据库的数据进行比较
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集合中的对象比较,取出不同对象的更多相关文章
- 使用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 ...
- Map集合中value()方法与keySet()、entrySet()区别
http://blog.csdn.net/liu826710/article/details/9001254 在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, ...
- map集合中value()、keySet()、entrySet()区别
在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet():将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键, ...
- Map集合中value()方法与keySet()、entrySet()区别 《转》
在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet(): 将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键 ...
- 牛客网Java刷题知识点之泛型概念的提出、什么是泛型、泛型在集合中的应用、泛型类、泛型方法、泛型接口、泛型限定上限、泛型限定下限、 什么时候使用上限?泛型限定通配符的体现
不多说,直接上干货! 先来看个泛型概念提出的背景的例子. GenericDemo.java package zhouls.bigdata.DataFeatureSelection; import ja ...
- Map集合中的方法
Map集合中的方法: values() 方法 : 获取集合中的所有的值----没有键,没有对应关系, KeySet() 方法: 将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代 ...
- 后端list集合中的数据传递到前台HTML中显示(表格形式)
关键字:web项目中前后台数据传递问题 在学习web项目的过程中,我们肯定会遇到前后台数据交换问题.这个问题我也思考了很久,今天借此总结一下.由于博主水平有限,如有不当之处,还请大家多多指正,,废话不 ...
- java8 从对象集合中取出某个字段的集合
public class FeildTest { public static void main(String[] args) { //定义list集合 List<P> list = Ar ...
- java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
import java.util.*; /* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素. 比如:存人对象.同姓名同年龄,视为同一个人.为重复元素. 思路: 1,对人描述,将数据 ...
- 使用Properties集合存储数据,遍历取出Properties集合中的数据和Properties集合中的方法store和load
package com.yang.Test.PropertiesStudy; import java.io.FileWriter; import java.io.IOException; import ...
随机推荐
- 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 ...
- 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 ...
- Linux文件压缩和解压缩命令
Linux文件压缩和解压缩命令: tar 命令(打包并压缩的话,原文件也会默认存在) -c 建立打包档案 -x 解包 -t 查看包里的类容 -r 向包里追加文件 -v 显示打包过程 -f 文件 比如: ...
- May 20th 2017 Week 20th Saturday
The true nobility is in being superior to your previous self. 真正的高贵在于超越过去的自己. Every night before I w ...
- 使用字面量或者绑定变量在HANA Studio里执行SQL语句
在SAP note 2000002 – FAQ: SAP HANA SQL Optimization里提到了SQL语句的两种执行方式,具体差异体现在where语句里搜索条件的指定方式上. 所谓Lite ...
- JAVA程序员常用软件类库下载地址整理
IT行业是个发展更新特别快的领域,每个程序员在职业生涯中都会经历各类技术和工具的更新迭代. 俗话说:工欲善其事,必先利其器.本着独乐乐不如众乐乐的精神(其实是自己健忘)本人把经常要用到的软件工具官方下 ...
- 【luogu P1262 间谍网络】 题解
题目链接:https://www.luogu.org/problemnew/show/P1262 注意: 1.缩点时计算出入度是在缩完点的图上用color计算.不要在原来的点上计算. 2.枚举出入度时 ...
- 【题解】UVA1218 Perfect Service
UVA1218:https://www.luogu.org/problemnew/show/UVA1218 刷紫书DP题ing 思路 参考lrj紫书 不喜勿喷 d(u,0):u是服务器,孩子是不是服务 ...
- SpringBoot非官方教程 | 第六篇:springboot整合mybatis
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-mybatis/ 本文出自方志朋的博客 本文主要 ...
- 涉及JSP、Servlet的页面编码问题
1. JSP页面中,二处的字符编码有何区别 1.<%@ page contentType="text/html;charset=UTF-8" %> 是服务器端java程 ...