从hashmap-Java中存储的列表向新列表添加值时出现问题

从hashmap-Java中存储的列表向新列表添加值时出现问题,java,arraylist,hashmap,Java,Arraylist,Hashmap,我一直在四处寻找一种方法来做到这一点,这让我发疯 我想做的是: 我有一个HashMap: qualifiedCompetitors = new HashMap<String, List<String>>(); 关键的刺是一个事件的名称和名单是一个竞争对手的名单。我想建立一份所有竞争对手的新名单 所以我尝试了各种方法,比如: ListOfAllqualifiedCompetitors = new ArrayList(qualifiedCompetitors.values(

我一直在四处寻找一种方法来做到这一点,这让我发疯

我想做的是:

我有一个HashMap:

qualifiedCompetitors = new HashMap<String, List<String>>();
关键的刺是一个事件的名称和名单是一个竞争对手的名单。我想建立一份所有竞争对手的新名单

所以我尝试了各种方法,比如:

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());
看看我得到了什么,这很好,但我不能再给他们添加一个新的列表?我知道我遗漏了一些明显的建议?

我想你说的是,你有一个
字符串
列表
的映射,你想将所有
列表
累积到一个长列表中。如果是这样的话:

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

eventsToCompetitors = ...

allCompetitors = new ArrayList<String>();
for (Collection<String> competitors : eventsToCompetitors.values())
{
  allCompetitors.addAll(competitors);
}
最终的地图事件;
所有参赛者的最终名单;
eventsToCompetitors=。。。
allCompetitors=new ArrayList();
对于(集合竞争对手:eventsToCompetitors.values())
{
所有竞争对手。添加所有(竞争对手);
}
列出所有竞争对手=新的ArrayList();
for(设置竞争对手:合格的竞争对手.values()){
所有竞争对手。添加所有(竞争对手);
}

这就是你的意思吗?

为什么不能将它们添加到列表中?什么代码不起作用,为什么不起作用?所以如果我尝试:ListOfAllqualifiedCompetitors=new ArrayList(qualifiedCompetitors.values());我无法编译(找不到符号)。如果尝试使用上面的方法进行迭代,我会将每个值作为不兼容的类型返回。您想要一个所有竞争对手的列表,还是一个竞争对手的列表?对于前者,请参见下面我的答案……然后我将使用这个新列表创建一个树集,因为这将删除重复项并对它们进行排序,首先创建一个树集并填充它而不是列表是否更有意义?@damagedgoods,这毕竟是集合的用途。如果不删除重复项,它们就不会有多好。除非你有理由,否则使用HashSet而不是TreeSet。@Greg_Kopff,Map.values()返回一个集合,而不是一个列表,所以这不会编译。@Neil:啊,是的,
values()
返回一个
集合
-我已经编辑了答案。是的-如果我将for each从一个集合更改为另一个列表,这会起作用。谢谢
final Map<String, List<String>> eventsToCompetitors;
final List<String> allCompetitors;

eventsToCompetitors = ...

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