兩個List比較各自對象的屬性相同的問題


最近做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-----


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM