挠子 2008-12-03 17:30
浏览 265
已采纳

JAVAList求和问题

我现在有三个List List里的对象是两个bean,我想要的条件是:list1和list2比较如果对象主键相等,累加添加到list3中。最后如果list1里的数据没有在list2中的数据,添加到list3中。如果list2没有在list1中,添加到list3中。
例:
bean1:
[code="java"]
public class Hyflightmanifest{
private String flightnumber;

  private String inflag;

  private Date schdate;

  pirvate int num;
public String getFlightnumber() {
    return flightnumber;
}

public void setFlightnumber(String flightnumber) {
    this.flightnumber = flightnumber;
}

public String getInflag() {
    return inflag;
}

public void setInflag(String inflag) {
    this.inflag = inflag;
}

public Date getSchdate() {
    return schdate;
}

public void setSchdate(Date schdate) {
    this.schdate = schdate;
}

public int getNum() {
    return num;
}

public void setNum(int num) {
    this.num= num;
}

}
[/code]
bean2:
[code="java"]
public class manifestbean{
private String flightnumber;

  private String inflag;

  private Date schdate;

  pirvate int num;

public String getFlightnumber() {
    return flightnumber;
}

public void setFlightnumber(String flightnumber) {
    this.flightnumber = flightnumber;
}

public String getInflag() {
    return inflag;
}

public void setInflag(String inflag) {
    this.inflag = inflag;
}

public Date getSchdate() {
    return schdate;
}

public void setSchdate(Date schdate) {
    this.schdate = schdate;
}

public int getNum() {
    return num;
}

public void setNum(int num) {
    this.num= num;
}

}
[/code]

[code="java"]
List maillist = cosysfightservicemailService.getBySeletive(example);

        for (int i = 0; i < flightmanifestTempList.size(); i++) {
            Hyflightmanifest manifestbean = new Hyflightmanifest();
            manifestbean = flightmanifestTempList.get(i);
            Date tempSchdate = manifestbean.getSchdate();
            manifestbean.setSchdate(Tools.getDateByStr("yyyy-MM-dd", Tools.getStrByDate("yyyy-MM-dd", tempSchdate)));
            for (int j = 0; j < maillist.size(); j++) {
                Hycosysfightservicemail mailbean = new Hycosysfightservicemail();
                if ((mailbean.getFlightnumber().trim()).equals(manifestbean.getFlightnumber().trim()) && (mailbean.getInflag().trim()).equals(manifestbean.getInflag().trim())
                        && (mailbean.getActualdate().getTime() == manifestbean.getSchdate().getTime())) {

                }
            }
        }

[/code]
[b]请问大家接着怎么做[/b]

  • 写回答

1条回答 默认 最新

  • iteye_10167 2008-12-03 23:52
    关注

    基本思路如下(只能是1:1或者1:0匹配)
    遍历list1,从list2查找匹配的,并且把找到删除
    如果没有匹配的,直接加入list3

    最后把list2剩下的加入list3

    //List list1, list2;
    List list3= new ArrayList();

    // 实现查找,没有则返回null
    manifestbean findAndRemoveFromList2(Hyflightmanifest f) {
    for (Iterator it= list2.iterator(); it.hasNext()) {
    manifestbean m= (manifestbean) it.next();
    if PK相等 {
    it.remove();
    return m;
    }
    }
    // no found
    return null;
    }
    public void merge() {
    for (Iterator it= list.iterator(); it.hasNext()) {
    Hyflightmanifest h= (Hyflightmanifest) it.next();
    m= findAndRemoveFromList2(h);
    // 有则相加
    if (null != m) {
    }
    // 无则直接加入list3
    list3.add(h);
    }
    // 把list2剩下的加入list3
    for (Iterator it= list2.iterator(); it.hasNext()) {

    }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥100 解决数据不连续出现问题
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误