2013-02-11 59 views
0

我有如下的更大的功能,部分:的Java结合多个集合有效

Collection<String> idSet; //idset != successors.keys() 
Map<String, ArrayList> successors; // parameter to larger function 
ArrayList<String> result = new ArrayList<String>(); 
    for (String id: idSet) { 
     ArrayList<String> idsuccessors = this.successors.get(id); 
     result.addAll(idSuccessors); 
     } 

我想从映射接班人的所有值组合成一个单一的集合。虽然上面的代码有效,但我认为必须有一个更清晰的方法(例如,在Python中,我用一条短线实现了它)。

result = set.union(*[set(successors(id)) for id in ids]) 

请注意,将映射从ArrayList类型转换为例如HashSet应该没有问题,应该有帮助。

任何意见是非常感谢。在此先感谢

+0

我不认为有一种方法可以使它更短,除非你使用一个库(如番石榴),它可能会有一些静态方法来做到这一点。 – assylias 2013-02-11 13:26:33

+3

使用番石榴MultiMap而不是实现自己的。它带有一个values()方法。如果您还需要该ID,请使用条目()。如果你不能,你的解决方案可能会达到最佳效果。 – 2013-02-11 13:38:27

+0

查看http://code.google.com/p/lambdaj/wiki/LambdajFeatures – BobTheBuilder 2013-02-11 14:07:47

回答

0

这是使用新的Java 8流的2班轮:

ArrayList<String> result = new ArrayList<>(); 
successors.values().forEach(result::addAll); 

我敢肯定有一个班轮潜伏的地方,但我还没有找到它