微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对于每个循环都在迭代,并且每次都返回最后一个迭代列表作为结果

如何解决对于每个循环都在迭代,并且每次都返回最后一个迭代列表作为结果

这是我的代码,它具有 for Each 循环,但每次迭代并给出最后一次迭代结果。 例如:如果有 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;
    }

有人能尽快帮忙吗。

提前致谢。

解决方法

您正在为同一个对象 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);
});

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

,

您的代码可以:

 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);
 });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。