最近做checkbox默认勾选的时候,涉及到两个list直接比较彼此对象的Id属性是否相同的问题。能力有限,想到这个笨方法。

创建一个Bean:

public class Bean {

  private String name;
private String id;
private String ch; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCh() {
return ch;
}
public void setCh(String ch) {
this.ch = ch;
} }

造出两个list:

Bean b1 = new Bean();
b1.setId("1");
b1.setName("n1");
Bean b2 = new Bean();
b2.setId("2");
b2.setName("n2");
Bean b3 = new Bean();
b3.setId("3");
b3.setName("n3");
Bean b4 = new Bean();
b4.setId("4");
b4.setName("n4"); Bean b5 = new Bean();
b5.setId("2");
b5.setName("n2");
Bean b6 = new Bean();
b6.setId("1");
b6.setName("n1"); List<Bean> la = new ArrayList<Bean>();
la.add(b1);
la.add(b2);
la.add(b3);
la.add(b4); List<Bean> lb = new ArrayList<Bean>();
lb.add(b5);
lb.add(b6);

写一个测试的main方法:

for(int i=0;i<la.size();i++){
if(lb.contains(la.get(i).getId())){
la.get(i).setCh("ch");
}
else{
la.get(i).setCh(" ");
}
System.out.println("eeee"+la.get(i).getId()+"-----"+la.get(i).getCh());
}

输出结果是:

eeee1-----
eeee2-----
eeee3-----
eeee4-----

这结果完全不是自己想要的,查了一下,list.contains(o),系统会对list中的每个元素e调用o.equals(e),方法,假如list中有n个元素,那么会调用n次o.equals(e),只要有一次o.equals(e)返回了true,那么list.contains(o)返回true,否则返回false,控制台打印了一下直接返回的false,顿时明白了什么。

重新修改下

for(int i=0;i<la.size();i++){
for(int k=0;k<lb.size();k++){
if(lb.get(k).getId().equals(la.get(i).getId())){
la.get(i).setCh("ch");
}
else{
la.get(i).setCh(" ");
} }
System.out.println("eeee"+la.get(i).getId()+"-----"+la.get(i).getCh()); }

输出结果:
eeee1-----ch
eeee2-----
eeee3-----
eeee4-----

这结果还是不对啊,无奈想到了debug断点调试,发现问题了,再次修改一下了。

for(int i=0;i<la.size();i++){
for(int k=0;k<lb.size();k++){
if(lb.get(k).getId().equals(la.get(i).getId())){
la.get(i).setCh("ch");
break;
}
else{
la.get(i).setCh(" ");
} }
System.out.println("eeee"+la.get(i).getId()+"-----"+la.get(i).getCh());
}

输出结果
eeee1-----ch
eeee2-----ch
eeee3-----
eeee4-----

两个List比较各自对象的属性相同的问题的更多相关文章

  1. 【java】【反射】反射实现判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更

    java的反射实现: 判断发生了修改操作,判断两个对象是否发生属性值的变更,判断两个List集合内对象的属性值是否发生变更 今日份代码: package com.sxd.streamTest; imp ...

  2. python 之 并发编程(开启子进程的两种方式,进程对象的属性)

    第九章并发编程 同一个程序执行多次是多个进程 import time import os ​ print('爹是:',os.getppid()) #父进程PID,(pycharm) print('me ...

  3. 有两个地方,用到了javabean对象和属性字符串值之间的转换

    1.有两个地方,用到了javabean对象和属性字符串值之间的转换 2.一个是接入层spring mvc,将json字符串参数转换为javaBean.通过@RequestBody javaBean方式 ...

  4. js对象中属性调用.和[] 两种方式的区别

    JS 调用属性一般有两种方法——点和中括号的方法. 标准格式是对象.属性(不带双引号),注意一点的是:js对象的属性,key标准是不用加引号的,加也可以,特别的情况必须加,如果key数字啊,表达式啊等 ...

  5. window对象的属性及事件。

    不同的运行环境有不同的“顶层对象”,而在浏览器的环境中,顶层对象就是window对象.window就是指当前的浏览器窗口. 例:var a = 1: window.a; //1 1.window对象的 ...

  6. JavaScript中两种类型的全局对象/函数

    这里所说的JavaScript指浏览器环境中的包括宿主环境在内的. 第一种是ECMAScript Global Object,第二种是宿主环境(Host)下的全局对象/函数. 一.核心JavaScri ...

  7. Javascript常用对象的属性和方法

    javascript为我们提供了一些非常有用的常用内部对象和方法.用户不需要用脚本来实现这些功能.这正是基于对象编程的真正目的. 在javascript提供了string(字符串).math(数值计算 ...

  8. python动态获取对象的属性和方法 (转载)

    首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): def __init__ ...

  9. python 学习笔记7(类/对象的属性;特性,__getattr__)

    27. 属性的__dict__系统 1)对象的属性可能来自: 其类的定义,叫做类属性 继承父类的定义 该对象实例定义(初始化对象时赋值),叫做对象属性 2)对象的属性存储在对象的 __dict__ 属 ...

随机推荐

  1. CSS 从入门到忘记

    CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. 一. css的三种引入方式 二. css的选择器(Select ...

  2. (转载)JProfiler试用手记

    JProfiler是一款Java的性能监控工具.可以查看当前应用的对象.对象引用.内存.CPU使用情况.线程.线程运行情况(阻塞.等待等),同时可以查找应用内存使用得热点,这里提供有几篇文章供参考:获 ...

  3. localStorage与location的用法

    1.localStorage 是h5提供的客户端存储数据的新方法: 之前,这些都是由 cookie 完成的.但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 coo ...

  4. hightcharts在移动端运用 FastClick后苹果上legend点击失效的解决办法

    问题:在移动端做图表运用了hightcharts,引用了fastclick来消除300ms的延迟,但是发现苹果(安卓正常)上hightcharts的legend点击不起作用了,必须长按才行. 使用fa ...

  5. if else 与switch case判断

    基础数据类型(四类八种 ) 不能为null. 整数型 byte 取值范围2的8次方 short 取值范围2的16次方 int 取值范围2的32次方 一般用int long 取值范围2的64次方 浮点型 ...

  6. Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

    Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...

  7. python数据结构之队列

    队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出的(First In First Out)的线性表,简称FIFO.允许插入的一端为队尾,允许删除的一端 ...

  8. (转)Linux(Centos)之安装Java JDK及注意事项

    场景:天下事有难易乎?为之,则难者亦易矣:不为,则易者亦难矣.人之为学有难易乎?学之,则难者亦易矣:不学,则易者亦难矣. 1 准备工作 下面配置jdk的方式在具有root权限时候能够执行.如果没有ro ...

  9. javascript对象的创建--相对java 怎样去创建了"类"i以及实例化对象

    由于javascript没有java那么多基本类型,同时也没有提供class这个东西,那么我们想实现javascript的对象创建应该怎么办呢,我简单地从w3c提供的课件中提取了一下几种方法: 一.工 ...

  10. SQL Server Alwayson创建代理作业注意事项

    介绍 Always On 可用性组活动辅助功能包括支持在辅助副本上执行备份操作. 备份操作可能会给 I/O 和 CPU 带来很大的压力(使用备份压缩). 将备份负荷转移到已同步或正在同步的辅助副本后, ...