【问题标题】:Logical error in loop resulting in unwanted output循环中的逻辑错误导致不需要的输出
【发布时间】:2013-10-31 13:05:54
【问题描述】:

我不确定如何解决这个问题。

 List<Temporary> getTemporaryList = getTemporary();
      Map<Integer, Set<Attribute>> attributeOrderMap = attributeOrderMap(getTemporaryList);
      Map<Integer, Set<OrderSample>> sampleOrderMap = sampleOrderMap(getTemporaryList);

      Set<OrderSample> temporaryOrderSampleSet = Sets.newHashSet();
      java.util.ListIterator<Order> it = orders.listIterator();
      List<Order> finalOrder = Lists.newArrayList();

for (Order order : orders) {
         temporaryOrderSampleSet.clear();
         if (sampleOrderMap.containsKey((order.getId()))) {
            Set<OrderSample> samples = sampleOrderMap.get(order.getId());

            for (OrderSample orderSample : samples) {
               Set<Attribute> attributes = attributeOrderMap.get(order.getId());
               orderSample.setAttributes(attributes);
               temporaryOrderSampleSet.add(orderSample);
               order.setSample(temporaryOrderSampleSet);
               finalOrder.add(order);
            }
         }
      }

我有一份订单清单。 1000 个订单。我有一组样本和一组属性。对于第一个属性,我想把它放在第一个样本中,然后把它放在第一个顺序中。然后对第二个属性也一样,把它放在第二个样本中,然后把那个样本放在第二个顺序中。

所以我的列表如下所示

Attribute1 --> sample1 --> Order1

Attribute2 --> sample2 --> Order2

Attribute3 --> sample3 --> Order3

Attribute4 --> sample4 --> Order4

我当前的代码一次又一次地添加样本。所以我的第一个列表开始时很小,然后我的第二个更大,因为它包含了第一个列表和第二个列表中的所有内容,然后第三个更大等等。我被卡住了,不知道该怎么办。

【问题讨论】:

  • 您似乎想说temporaryOrderSampleSet.clear();for (OrderSample orderSample : samples) 循环中?

标签: java loops logic


【解决方案1】:

您需要在for 循环内创建一个新的temporaryOrderSampleSet

for (Order order : orders) {
         Set<OrderSample> temporaryOrderSampleSet = Sets.newHashSet();
         if (sampleOrderMap.containsKey((order.getId()))) {

否则,您会一遍又一遍地放置 same 列表,然后将其清除,以便只有最后一次迭代设置它的值。

另一个问题:

order.setSample(temporaryOrderSampleSet);

可以设置在内部 for 循环之外。在您的代码中,您只需一次又一次地覆盖该值。

【讨论】:

  • 所以我会在循环内而不是在循环外声明temporaryOrderSampleSet?
  • 是的。这样,每个订单都会获得自己的个样本。
  • 我仍然得到一个每次都在增长的列表
  • 哪个列表在增长?
  • 现在只是尝试你的另一个问题,看看它是否有效,现在正在编译
猜你喜欢
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多