for 循环保存最后一个索引而不是按索引保存索引

for cycle saving the last index instead of saving index by index

我是新来的 java 我有一个问题,for 循环没有将数据添加到列表中:

这是代码

@RequestMapping(value = "/index", method = RequestMethod.GET)
    public String index(Model modl) throws TwitterException {
        
        // --------------------------------------------------
                // getTweets example
                // --------------------------------------------------
                Twitter twitter = new TwitterFactory().getInstance();
                /*
                 * final TweetsResponse tweets = GetTweetsKt.getTweets(twitter, new
                 * long[]{1510021574505738201L}, null, null, null, null, null, "");
                 */

                /*
                 * userId: Long, endTime: Date? = null, exclude: String? = null, expansions:
                 * String? = null, maxResults: Int? = null, mediaFields: String? = null,
                 * paginationToken: String? = null, placeFields: String? = null, pollFields:
                 * String? = null, sinceId: Long? = null, startTime: Date? = null, tweetFields:
                 * String? = null, untilId: Long? = null, userFields: String? = null,
                 */

                long userId = 1510021146334437310L;
                Date endTime = null;
                String exclude = null;
                String expansions = null;
                int maxResults = 100;
                String mediaFields = null;
                String paginationToken = null;
                String placeFields = null;
                String pollFields = null;
                long sinceId = 1510021521342926810L;
                Date startTime = null;
                String tweetFields = null;
                long untilId = 1510022761187627010L;
                String userFields = null;

                final TweetsResponse tweets = TimelinesExKt.getUserTweets(twitter, userId, endTime, exclude, expansions,
                        maxResults, mediaFields, paginationToken, placeFields, pollFields, sinceId, startTime, tweetFields,
                        untilId, userFields);


                tweetModel tweetmodel = new tweetModel();
                List<tweetModel> tweetmodelList = new ArrayList<>();
                for (int i = 0; i < tweets.getTweets().size(); i++) {
                    System.out.println(i);
                    System.err.println("FOR TWEETS = " + tweets.getTweets().get(i).getText().toString());
                    tweetmodel.setTweets(tweets.getTweets().get(i).getText().toString());
                    this.tweetmodel2.setTweets(tweetmodel.getTweets().toString());
                    tweetmodelList.add(this.tweetmodel2);
                    System.err.println("TWEETMODEL2::::::::::::::::"+this.tweetmodel2.getTweets().toString());
                    System.err.println("//////////////////TWEET MODEL HAVE THIS!!!!!!! tweetmodel.settweets=="
                            + tweetmodel.getTweets().toString());
                    
                }
                
                for (int z = 0; z < tweetmodelList.size(); z++) {
                    
                    System.err.println(" ====== TWEETS  IN TWEETMODELIST AFTER FIRST FOR tweetmodelList.add(tweetmodel); ======== " + tweetmodelList.get(z).getTweets().toString());
                    

                
                
                }

        modl.addAttribute("tweetlists", tweetmodelList);

        return "index";
    }

这是我设置 getTweets() 函数获取的数据的代码行

tweetmodel.setTweets(tweets.getTweets().get(i).getText().toString());
                        this.tweetmodel2.setTweets(tweetmodel.getTweets().toString());
                        tweetmodelList.add(this.tweetmodel2);

问题是 tweetmodelList 正在显示和记录最后一条记录集,我有 7 条推文,函数写入最后一条记录的 7 倍,不知道我做错了什么,因为

this.tweetmodel2.setTweets(tweetmodel.getTweets().toString());
                            tweetmodelList.add(this.tweetmodel2);

在 for 循环内,因此它应该迭代....例如,为了更好地理解发生的事情,我将 post 这里打印在控制台中的结果

控制台中的数据在这里

FOR TWEETS = tweet 6
TWEETMODEL2::::::::::::::::tweet 6
//////////////////TWEET MODEL HAVE THIS!!!!!!! tweetmodel.settweets==tweet 6
1
2
3
4
5
6
FOR TWEETS = hello
TWEETMODEL2::::::::::::::::hello
//////////////////TWEET MODEL HAVE THIS!!!!!!! tweetmodel.settweets==hello
FOR TWEETS = cinco tweets
TWEETMODEL2::::::::::::::::cinco tweets
//////////////////TWEET MODEL HAVE THIS!!!!!!! tweetmodel.settweets==cinco tweets
FOR TWEETS = no
TWEETMODEL2::::::::::::::::no
//////////////////TWEET MODEL HAVE THIS!!!!!!! tweetmodel.settweets==no
FOR TWEETS = si
TWEETMODEL2::::::::::::::::si
//////////////////TWEET MODEL HAVE THIS!!!!!!! tweetmodel.settweets==si
FOR TWEETS = tweet number 3
TWEETMODEL2::::::::::::::::tweet number 3
//////////////////TWEET MODEL HAVE THIS!!!!!!! tweetmodel.settweets== tweet number 3
FOR TWEETS = tweet last
TWEETMODEL2::::::::::::::::tweet last
//////////////////TWEET MODEL HAVE THIS!!!!!!! tweetmodel.settweets==programar es mi tweet last
 ====== TWEETS  IN TWEETMODELIST AFTER FIRST FOR tweetmodelList.add(tweetmodel); ======== tweet last
 ====== TWEETS  IN TWEETMODELIST AFTER FIRST FOR tweetmodelList.add(tweetmodel); ======== tweet last
 ====== TWEETS  IN TWEETMODELIST AFTER FIRST FOR tweetmodelList.add(tweetmodel); ======== tweet last
 ====== TWEETS  IN TWEETMODELIST AFTER FIRST FOR tweetmodelList.add(tweetmodel); ======== tweet last
 ====== TWEETS  IN TWEETMODELIST AFTER FIRST FOR tweetmodelList.add(tweetmodel); ======== tweet last
 ====== TWEETS  IN TWEETMODELIST AFTER FIRST FOR tweetmodelList.add(tweetmodel); ======== tweet last
 ====== TWEETS  IN TWEETMODELIST AFTER FIRST FOR tweetmodelList.add(tweetmodel); ======== 
tweet last

如您所见,出于某种原因,TWEETMODELIST 仅保存最后一个注册表,但保存相同的正确数量的推文,即 7记录器或由

保存
tweetmodelList.add(this.tweetmodel2);

在此先感谢,正确答案将被标记为已解决

首先,下面的语句在for循环中执行:

tweetmodel.setTweets(tweets.getTweets().get(i).getText().toString());
this.tweetmodel2.setTweets(tweetmodel.getTweets().toString());

它的作用是替换tweetModel的tweets集合,然后替换tweetModel2的tweets集合。 但是,当您将 this.tweetmodel2 添加到 tweetmodelList 中时,您并没有添加包含 this.tweetmodel2 的推文集合。相反,您要添加对 this.tweetmodel2 本身的引用。

然后,在 for 循环的每次迭代之后, this.tweetmode2 的实例是相同的,但它的推文集合不同(因为它被新的替换)。因此,在 6 次迭代之后,您只有一个 this.tweetmode2 实例,最后的推文被替换了。这就是为什么你看到最后一条推文被打印出来的原因。

由于 for 语句迭代了 6 次,并且你有下一条语句在里面,所以它向变量 tweetmodelList.

添加了 6 个元素
tweetmodelList.add(this.tweetmodel2); <-- adds the reference to variable tweetmodel2 into tweetmodelList 6 times

可以通过创建新实例并将其分配给 this.tweetmodel2 来解决此问题,如下所示:

tweetmodel.setTweets(tweets.getTweets().get(i).getText().toString());
this.tweetmodel2 = new TweetModel2(); <-- Create and assign a new instance
this.tweetmodel2.setTweets(tweetmodel.getTweets().toString());
tweetmodelList.add(this.tweetmodel2);