【问题标题】:For each loop is iterating, and everytime returning the last iteration list as result对于每个循环都在迭代,并且每次都返回最后一个迭代列表作为结果
【发布时间】:2021-05-12 10:53:40
【问题描述】:

这是我的代码,它具有 for Each 循环,但每次它都在迭代并给出最后一次迭代结果。 EX:如果有 2 次迭代。两次迭代都给出了最后一次迭代的结果。

private List<someData> getsomeDetails(
            BusDetail bus)
    {
        List<someData> someDataList = new ArrayList<>();
        SSsome SSsome = new SSsome();
        
        bus.getBUDetail().get(0).getBUDetail().getBUList().forEach(bu -> {
            SSsome.setNbr(bu.getNumber());
            SSsome.setCountryCode(bu.getState());
            SSsome.setStatus("PROCESSING");
            someDataList.add(SSsome);
        });
        
        return someDataList;
    }

谁能尽快帮忙。

提前致谢。

【问题讨论】:

    标签: java arraylist foreach collections


    【解决方案1】:

    您正在将值设置为同一对象SSsome。自然,最后一次迭代将是最近的一次,因此您会看到上一次迭代的值。

    基本上,您在列表中添加的所有对象都与最近一次迭代的值相同。

    您需要在 forEach 中创建对象并附加到列表中。

    bus.getBUDetail().get(0).getBUDetail().getBUList().forEach(bu -> {
        SSsome SSsome = new SSsome();
        SSsome.setNbr(bu.getNumber());
        SSsome.setCountryCode(bu.getState());
        SSsome.setStatus("PROCESSING");
        someDataList.add(SSsome);
    });
    

    注意:如果创建对象,更新值,添加到列表,然后再次更新值;列表中的对象也会更新。

    【讨论】:

      【解决方案2】:

      您的代码可以:

       SSsome SSsome = new SSsome();
          
       bus.getBUDetail().get(0).getBUDetail().getBUList().forEach(bu -> {
              SSsome.setNbr(bu.getNumber());
              SSsome.setCountryCode(bu.getState());
              SSsome.setStatus("PROCESSING");
              someDataList.add(SSsome);
       });
      

      所以只有一个 SSSome,是在循环之外创建的,所以你一直在修改同一个。我想你想做的是:

       bus.getBUDetail().get(0).getBUDetail().getBUList().forEach(bu -> {
              SSsome SSsome = new SSsome();
              SSsome.setNbr(bu.getNumber());
              SSsome.setCountryCode(bu.getState());
              SSsome.setStatus("PROCESSING");
              someDataList.add(SSsome);
       });
      

      【讨论】:

      • 感谢您的清晰解释。我明白了。
      猜你喜欢
      • 1970-01-01
      • 2013-01-21
      • 2018-12-01
      • 2016-01-05
      • 2011-08-16
      • 2021-10-14
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多