我是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 回圈內,所以它應該迭代......例如,為了更好地理解發生了什么,我將在這里發布在控制臺中列印的結果
控制臺中的資料在這里
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);
在此先感謝,正確答案將被標記為已解決
uj5u.com熱心網友回復:
for首先,在回圈內執行下一條陳述句:
tweetmodel.setTweets(tweets.getTweets().get(i).getText().toString());
this.tweetmodel2.setTweets(tweetmodel.getTweets().toString());
它所做的是替換 的 tweets 集合tweetModel,然后替換 的 tweets 集合tweetModel2。但是,當您添加時,您this.tweetmodel2并tweetmodelList沒有添加包含this.tweetmodel2. 相反,您正在添加對this.tweetmodel2自身的參考。
然后,在回圈的每次迭代之后for,實體this.tweetmode2是相同的,但它的推文集合不同(因為它被新的替換)。因此,在 6 次迭代之后,您只有一個實體this.tweetmode2和最后一條推文被替換。這就是為什么你會看到最后一條推文列印出來的原因。
由于該for陳述句迭代了 6 次,并且您在其中有下一條陳述句,因此它在變數中添加了 6 個元素tweetmodelList。
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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/456883.html
