zoukankan      html  css  js  c++  java
  • 两个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-----

  • 相关阅读:
    TiDB数据库05TiDB的用户管理与安全,文件与日志管理
    Java基础知识16Arrays、System常用方法使用
    TiDB数据库07TiDB集群管理(TiDB/TiKV/PD/TiFlash在线扩容与在线缩容)
    【转】在SQL Server中创建用户角色及授权(使用SQL语句)
    Javascript的IE和Firefox兼容问题
    JavaScript的私有变量
    JavaScript 中的内存泄露模式
    javascript内存泄漏问题
    全面理解javascript的caller,callee,call,apply概念(修改版)
    javascript跨域问题
  • 原文地址:https://www.cnblogs.com/phil_jing/p/5020335.html
Copyright © 2011-2022 走看看