【问题标题】:How can i do this list addition in java?我怎样才能在java中做这个列表添加?
【发布时间】:2014-03-20 21:11:14
【问题描述】:

我有两个列表,我遍历一个列表并尝试匹配一些项目,然后用另一个列表替换一个列表的内容。

public static void setLtItems(List<ItmResponse> list1, List<ItmResponse> list2){
        ListIterator<ItmResponse> list1Iterator = list1.listIterator();
        while (list1Iterator.hasNext()) {
            ItmResponse a= list1Iterator.next();
            for (ItmResponse b : list2) {
                if (a.getOrgTransNo().equalsIgnoreCase(b.getOrgTransNo())) {
                // replace the item in list1 with the list2 item
                list1Iterator.set(b);
                }
            }

上面的代码工作正常,但是如果列表 2 中还有一个项目与 list1 中的一个项目匹配,但该项目未添加到 list1,因为 list1 仅包含 1 个项目,而列表有 2 个项目与 list1 项目匹配。因此,在替换 list1 中 list2 的第一项后,我必须将 list 2 的第二项添加到 list1 作为第二项。在java中如何做到这一点?

【问题讨论】:

  • 所以第一次使用set,然后使用add?
  • 是的,但while (list1Iterator.hasNext()) 将只有一个元素。这就是问题所在。
  • 看我的回答,如果我理解正确的话,这应该可以工作

标签: java list iteration addition


【解决方案1】:

试试

while (list1Iterator.hasNext()) {
    boolean found = false;                 // new
    ItmResponse a= list1Iterator.next();
    for (ItmResponse b : list2) {
    if (a.getOrgTransNo().equalsIgnoreCase(b.getOrgTransNo())) {
       // replace the item in list1 with the list2 item

       if (!found) {
           list1Iterator.set(b); 
           found = true;
       } 
       else {
           list1Iterator.add(b); 
       }
    }
}

【讨论】:

    【解决方案2】:

    使用 OrgTransNo 对 list1 和 list2 进行排序会起作用

    如果值包含在 list1 中,则添加到 list1 而不设置 ...

    【讨论】:

    • 如果您的列表未排序,您如何假设 list2 的第二个元素与 list2 的第一个元素相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2022-11-09
    • 2018-01-21
    相关资源
    最近更新 更多