• 两个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-----

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


  • 相关阅读:
    制作Autorun的CD
    Sybase ASE MDA tables 装不上怎么办?
    对于TStringList.Find函数,我有话要说
    HH.exe CHM Operator Command.
    Delphi 7的一些常用的快捷键
    Explain Plan
    在Delphi中的Log
    subst windows下实用的磁盘映射工具
    Excel 2007 如何冻结多行&多列
    LinqToDataTable[转]
  • 原文地址:https://www.cnblogs.com/phil_jing/p/15615904.html
Copyright © 2020-2023  润新知