baidu_39234208 2018-07-24 15:41 采纳率: 50%
浏览 2580
已采纳

java list集合属性值比较

比较两个list,如何找出相同属性id,其他属性,如name值不相同的数据?需要怎样重写equals吗?我用两次for循环,效率太低了!
public static List needupdatetdxxlist() {
List getoratdxxlist=getoratdxx();
List getresttdxxlist = getrestgctdxx();
List needupdatetdxx = new ArrayList();

            try {           

                for (int i = 0; i < getresttdxxlist.size(); i++) {
                    gctd gctd =new gctd();

                    for (int j = 0; j < getoratdxxlist.size(); j++) {



                        String DevChnId = getresttdxxlist.get(i).getDevChnId();
                        String DevChnName = getresttdxxlist.get(i).getDevChnName(); 
                        String Manufacturer = getresttdxxlist.get(i).getManufacturer();
                        double GpsX=getresttdxxlist.get(i).getGpsX();
                        double GpsY=getresttdxxlist.get(i).getGpsY();
                        int DevChnType=getresttdxxlist.get(i).getDevChnType();
                        int CameraType=getresttdxxlist.get(i).getCameraType();
                        String DevChnSn =getresttdxxlist.get(i).getDevChnSn();
                        int Direct=getresttdxxlist.get(i).getDirect();
                        int LaneNo=getresttdxxlist.get(i).getLaneNo();
                        String OrgName = getresttdxxlist.get(i).getOrgName();
                        String OrgCode =getresttdxxlist.get(i).getOrgCode();
                    if (DevChnId.equals(getoratdxxlist.get(j).getDevChnId()) && !DevChnName.equals(getoratdxxlist.get(j).getDevChnName()))
                    {
                        gctd.setDevChnId(DevChnId);
                        gctd.setDevChnName(DevChnName);
                        gctd.setManufacturer(Manufacturer);
                        gctd.setGpsX(GpsX);
                        gctd.setGpsY(GpsY);
                        gctd.setDevChnType(DevChnType);
                        gctd.setCameraType(CameraType);
                        gctd.setDevChnSn(DevChnSn);
                        gctd.setDirect(Direct);
                        gctd.setLaneNo(LaneNo);
                        gctd.setOrgName(OrgName);
                        gctd.setOrgCode(OrgCode);                           
                        needupdatetdxx.add(gctd);
                        LOGGER.debug("需要更新的设备通道:"+DevChnId+"  "+DevChnName);  
                        break;
                    }               
                  }


                }

                        } catch (Exception e) {

                               e.printStackTrace();
                        } 
            return needupdatetdxx;
        }
  • 写回答

4条回答 默认 最新

  • threenewbee 2018-07-24 16:03
    关注
     效率比较高的方式是使用HashMap<int, Pair>
    其中
    class Pair
    {
    public 第一个List类型 Item1;
    public 第二个List类型 Item2;
    }
    
    首先,遍历第一个list,将所有条目添加到以id为key,Pair为值的HashMap里面,作为Item1
    然后遍历第二个List,判断是否在Hashmap里有对应的id,如果有,把自身添加到对应的Pair对象,作为Item2
    最后遍历一下HashMap,将结果取出来就是你要的。
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 请问如何在openpcdet上对KITTI数据集的测试集进行结果评估?
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗