获取包含用户所有标签的地图列表
Geting list of hmaps where containing all tags of a user
1问题是在添加新的 hmap 时,它的元素会添加到最旧的元素中。如何获取 hmap 列表,其中每个 hmap 都包含用户的所有标签?
public List<HashMap<String, String>>tag_pp_user(String name,List<String> c) throws TwitterException, IOException, InterruptedException{
List<HashMap<String, String>> c4 = new ArrayList<>();
// c4 id a list of hashmap where each hashmap must contain the hahstags of a user wherr the key is the hashtag and the value is the name of the user
HashMap<String, String> hmap = new HashMap<String, String>();
if (c.size()>40) {
// c is a list of friends where i'm searching the tags of each c.get(j) and i need just 40 friend
for(int j=0;j<40;j++){
hmap=hashtag_user(c.get(j));
c4.add(hmap); }
}
else {
for(int j=0;j<c.size();j++){
hmap=hashtag_user(c.get(j));
System.out.println(hmap.size());
c4.add(hmap);
}
}
// when i view c4 i find that the new hashmap is added in the previous hmaps
return c4;
}
the result
public HashMap<String, String> hashtag_user(String name) throws TwitterException, IOException {
列表 l= new ArrayList();
HashMap hmap = new HashMap();
Paging page = new Paging(1,200);
int p=1;
while(p<=10){
page.setPage(p);
statuses.addAll(twitter.getUserTimeline(name,page));
p++;
}
for(Status s:statuses){
HashtagEntity[] hts =s.getHashtagEntities(); //hmap.clear();
// System.out.println(s.getText());
if ( hts.length > 0) {
// hmap.clear();
for(int j =0;j<hts.length;j++){//contains(hts[j].getText())
// if(!hmap.containsKey(hts[j].getText()))//{
// System.out.println("**********"+hts[j].getText());
if( !hts[j].getText().equals("hashtag") && !hts[j].getText().equals("tweet") && !hts[j].getText().equals("RT") && !hts[j].getText().equals("rt") && !hts[j].getText().equals("https")&& !hts[j].getText().equals("HTTPS")){
//System.out.println("**********"+hts[j].getText());
hmap.put(hts[j].getText(),name);//}
}
}
} // System.out.println(hts.length);
//Collections.unmodifiableMap(hmap);
}
return hmap;
}
原因是您正在为对象使用相同的引用 hmap,它在 for 循环之外并且不在该 for 循环的本地,并且引用将具有 hmap 指向的最新对象...以保护它,每次要添加到列表时都创建新的 HashMap!!!
public List<HashMap<String, String>>tag_pp_user(String name,List<String> c) throws TwitterException, IOException, InterruptedException{
List<HashMap<String, String>> c4 = new ArrayList<>();
// c4 id a list of hashmap where each hashmap must contain the hahstags of a user wherr the key is the hashtag and the value is the name of the user
//HashMap<String, String> hmap = new HashMap<String, String>();
if (c.size()>40) {
// c is a list of friends where i'm searching the tags of each c.get(j) and i need just 40 friend
for(int j=0;j<40;j++){
//HashMap<String, String> hmap = new HashMap<String, String>();
//hmap=hashtag_user(c.get(j));
c4.add(hashtag_user(c.get(j))); }
}
else {
for(int j=0;j<c.size();j++){
//HashMap<String, String> hmap = new HashMap<String, String>();
//hmap=hashtag_user(c.get(j));
//System.out.println(hmap.size());
c4.add(hashtag_user(c.get(j)));
}
}
// when i view c4 i find that the new hashmap is added in the previous hmaps
return c4;
}
1问题是在添加新的 hmap 时,它的元素会添加到最旧的元素中。如何获取 hmap 列表,其中每个 hmap 都包含用户的所有标签?
public List<HashMap<String, String>>tag_pp_user(String name,List<String> c) throws TwitterException, IOException, InterruptedException{
List<HashMap<String, String>> c4 = new ArrayList<>();
// c4 id a list of hashmap where each hashmap must contain the hahstags of a user wherr the key is the hashtag and the value is the name of the user
HashMap<String, String> hmap = new HashMap<String, String>();
if (c.size()>40) {
// c is a list of friends where i'm searching the tags of each c.get(j) and i need just 40 friend
for(int j=0;j<40;j++){
hmap=hashtag_user(c.get(j));
c4.add(hmap); }
}
else {
for(int j=0;j<c.size();j++){
hmap=hashtag_user(c.get(j));
System.out.println(hmap.size());
c4.add(hmap);
}
}
// when i view c4 i find that the new hashmap is added in the previous hmaps
return c4;
}
the result
public HashMap<String, String> hashtag_user(String name) throws TwitterException, IOException {
列表 l= new ArrayList();
HashMap
Paging page = new Paging(1,200);
int p=1;
while(p<=10){
page.setPage(p);
statuses.addAll(twitter.getUserTimeline(name,page));
p++;
}
for(Status s:statuses){
HashtagEntity[] hts =s.getHashtagEntities(); //hmap.clear();
// System.out.println(s.getText());
if ( hts.length > 0) {
// hmap.clear();
for(int j =0;j<hts.length;j++){//contains(hts[j].getText())
// if(!hmap.containsKey(hts[j].getText()))//{
// System.out.println("**********"+hts[j].getText());
if( !hts[j].getText().equals("hashtag") && !hts[j].getText().equals("tweet") && !hts[j].getText().equals("RT") && !hts[j].getText().equals("rt") && !hts[j].getText().equals("https")&& !hts[j].getText().equals("HTTPS")){
//System.out.println("**********"+hts[j].getText());
hmap.put(hts[j].getText(),name);//}
}
}
} // System.out.println(hts.length);
//Collections.unmodifiableMap(hmap);
}
return hmap;
}
原因是您正在为对象使用相同的引用 hmap,它在 for 循环之外并且不在该 for 循环的本地,并且引用将具有 hmap 指向的最新对象...以保护它,每次要添加到列表时都创建新的 HashMap!!!
public List<HashMap<String, String>>tag_pp_user(String name,List<String> c) throws TwitterException, IOException, InterruptedException{
List<HashMap<String, String>> c4 = new ArrayList<>();
// c4 id a list of hashmap where each hashmap must contain the hahstags of a user wherr the key is the hashtag and the value is the name of the user
//HashMap<String, String> hmap = new HashMap<String, String>();
if (c.size()>40) {
// c is a list of friends where i'm searching the tags of each c.get(j) and i need just 40 friend
for(int j=0;j<40;j++){
//HashMap<String, String> hmap = new HashMap<String, String>();
//hmap=hashtag_user(c.get(j));
c4.add(hashtag_user(c.get(j))); }
}
else {
for(int j=0;j<c.size();j++){
//HashMap<String, String> hmap = new HashMap<String, String>();
//hmap=hashtag_user(c.get(j));
//System.out.println(hmap.size());
c4.add(hashtag_user(c.get(j)));
}
}
// when i view c4 i find that the new hashmap is added in the previous hmaps
return c4;
}