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