【问题标题】:adding arraylist object in iterator while loop causes second object to over write one object在迭代器while循环中添加arraylist对象会导致第二个对象覆盖一个对象
【发布时间】:2018-03-22 17:51:28
【问题描述】:

我有一个使用迭代器迭代的数组列表。迭代的数据作为参数传递给方法 getDetails。现在方法返回的数据被写入一个arraylist detailsList。因此,如果 arraylist DTOList 有两个不同的对象,则第二个对象会覆盖第一个对象。所以当我阅读列表时,它有两个相同的对象内容。

List < BRType > detailsList= new ArrayList < BRType > ();
        List < RDTO > rDTOList = crList;
        List < ADTO > aDTOList = daList;
        Iterator < RDTO > rDTOIterator = rDTOList.iterator();
         Iterator < ADTO > aDTOIterator = aDTOList.iterator();
        while (rDTOIterator.hasNext() && aDTOIterator.hasNext()) {
            RDTO rDTO = rDTOIterator.next();
            ADTO aDTO = aDTOIterator.next();

        detailsList.add(getDetails(rDTO , aDTO , bookingRuleType,null));
    }

在第一个 while 循环中,detailsList 的代码为 1,而在第二次运行期间,它的代码为 2。所以当我运行下面的代码时,我得到 2 和 2

  for(BRType d : detailsList){
                System.out.println(d.getCode());

            }

【问题讨论】:

  • 问题是……?您希望列表中有唯一的对象,还是希望对象多次出现在列表中?
  • 问题是它不应该覆盖第一个。我需要独一无二的

标签: java arraylist collections while-loop iterator


【解决方案1】:

我明白了!!!这是一个小错误。在这个方法调用

getMarCancelPolicyDepositRuleBySWCancelPolicyDepositRule(cancelDepositRuleDTO, cancelDepositAmountDTO, bookingRuleType,null)

该方法的bookingRuleType 参数,该对象引用是在while 循环之外创建的。所以我把这个 BookingRuleType bookingRuleType = new BookingRuleType(); 放在 while 循环中,它就像魅力一样工作

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 1970-01-01
    • 2022-01-22
    • 2020-12-26
    • 2018-12-23
    • 1970-01-01
    • 2013-09-08
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多