码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-12-04 22:25:59      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

最近做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比较各自对象的属性相同的问题

标签:

原文地址:http://www.cnblogs.com/phil_jing/p/5020335.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!