用于循环保存最后一个索引,而不是逐索引保存索引



我是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条tweet,函数写入了最后一条记录的7次,不知道我做错了什么,因为

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

在for循环中,所以它应该迭代。。。。例如,为了更好地了解发生了什么,我将在这里发布控制台中打印的结果

控制台HERE 中的数据

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条。问题是,正如你所见,其他7条推文是不同的,没有被记录或保存

tweetmodelList.add(this.tweetmodel2);

提前感谢,正确答案将标记为已解决

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

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

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

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

由于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);

相关内容

  • 没有找到相关文章

最新更新