循环中的逻辑错误导致不需要的输出

时间:2013-10-31 13:05:55

标签: java loops logic

我不知道如何解决这个问题。

 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个订单。我有一组样本和一组属性。对于第一个属性,我想将它放在第一个样本中,然后将其放在第一个顺序中。然后对于第二个属性,将其放在第二个样本中,然后将该样本放入第二个属性。

所以我的列表看起来像下面的

属性1 - &gt; sample1 - &gt; Order1

属性2 - &gt; sample2 - &gt; Order2

属性3 - &gt; sample3 - &gt; Order3

属性4 - &gt; sample4 - &gt; Order4

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

1 个答案:

答案 0 :(得分:1)

您需要在temporaryOrderSampleSet循环中创建新的for

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

否则,您反复放置相同的列表,并清除它,以便只有最后一次迭代才会设置它。

另一个问题:

order.setSample(temporaryOrderSampleSet);

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