将值添加到存储在散列表中的列表中的新列表时遇到问题 - Java

问题描述:

我一直在寻找一种方法来做到这一点,它让我生气了!将值添加到存储在散列表中的列表中的新列表时遇到问题 - Java

我试图做的是如下:

我有一个HashMap:

qualifiedCompetitors = new HashMap<String, List<String>>(); 

我分配到HashMap中的值是:

String[] events = {"Helicopter", "Amphibious", 
        "4x4", "Fire Engine"}; 

String[][] competitors = 
{ 
    {"Greg", "Will", "Fleur", "Bill", "Bella", "Sally", "Olive", "Sal", "Dora", "Chas"}, 
    {"Yuri", "Abe", "Tim", "Fleur", "Bonnie", "Vera", "Ed", "Dan", "Jill", "Rose", "Zoe"}, 
    {"Tim", "Fleur", "Will", "Bill", "Bella", "Dan", "Jill", "Rose", "Greg", "Abe", "Sally", "Yuri", "Olive", "Sal", "Jim"}, 
    {"Jill", "Rose", "Greg", "Abe", "Bonnie", "Vera", "Ed", "Zoe", "Ben", "Freda", "Chuck", "Fred"} 
}; 

的关键刺痛是事件的名称,列表是竞争对手的名单。我想建立一个所有竞争对手的新名单。

所以,我已经尝试过各种东西,如:

ListOfAllqualifiedCompetitors = new ArrayList(qualifiedCompetitors.values()); 

,然后通过HashMap的迭代:

Collection allCompetitors = qualifiedCompetitors.values(); 

System.out.println("Values of Collection created from Hashtable are :"); 
//iterate through the collection 
Iterator itr = allDrivers.iterator(); 
while(itr.hasNext()) 
    System.out.println(itr.next()); 

要查看VALES我得到的,这是很好的,但我不能再加入他们新的名单?我知道我错过了明显的任何建议?

+1

*为什么*你不能将它们添加到列表中?哪些代码不起作用,以及*为什么*不起作用? – 2012-04-18 07:52:32

+0

所以如果我尝试: ListOfAllqualifiedCompetitors = new ArrayList(qualifiedCompetitors.values()); 我无法编译(找不到符号)。 如果尝试使用类似上面的方法进行迭代,我会将每个值作为不兼容的类型返回。 – damagedgoods 2012-04-18 07:57:37

+0

你想要所有竞争者的清单还是竞争者清单的清单?对于前者,请参阅下面的答案... – 2012-04-18 07:59:32

什么你说我觉得是,你有地图StringList<String>并希望所有的List<String>的积聚成一个长长的名单。如果是这样的话:

final Map<String, List<String>> eventsToCompetitors; 
final List<String> allCompetitors; 

eventsToCompetitors = ... 

allCompetitors = new ArrayList<String>(); 
for (Collection<String> competitors : eventsToCompetitors.values()) 
{ 
    allCompetitors.addAll(competitors); 
} 
+0

明白了 - 现在变得更有意义了......干杯 – damagedgoods 2012-04-18 08:05:57

+0

然后我使用这个新列表来创建一个treeset,因为这样会删除重复项并对它们进行排序,会更有意义首先创建一个treeset并填充它而不是列表? – damagedgoods 2012-04-18 08:16:37

+0

@damagedgoods,这是什么设置是最后的。如果他们不删除重复项目,他们就不会太好。虽然除非你有理由,使用HashSet而不是TreeSet。 – Neil 2012-04-18 08:48:47

List<String> allCompetitors = new ArrayList<String>(); 
for(Set<String> competitors : qualifiedCompetitors.values()) { 
    allCompetitors.addAll(competitors); 
} 

这是什么意思?

+0

是 - 如果我将每个设置从更改为列表,则工作。谢谢 – damagedgoods 2012-04-18 08:19:31