最近做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-----
时间: 2024-10-24 21:12:33