两个List比较各自对象的属性相同的问题_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 两个List比较各自对象的属性相同的问题

两个List比较各自对象的属性相同的问题

 2017/9/3 19:08:47  phil_jing  程序员俱乐部  我要评论(0)
  • 摘要:最近做checkbox默认勾选的时候,涉及到两个list直接比较彼此对象的Id属性是否相同的问题。Bean类:publicclassBean{privateStringname;privateStringid;privateStringch;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetId(){returnid;}publicvoidsetId
  • 标签:list 问题

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

Bean类:

?

class="java">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-----

总结出一点,有时候我脑子挺容易短路的。

?

发表评论
用户名: 匿名