最简单的方法就是手动枚举枚举,其转储到一个集合,然后返回的枚举那个集合。
如果做不到这一点,你可以结合Google Guava操作要做到这一点,是这样的:
// the map of enumerations
Map<?, Enumeration<String>> map = ...
// a function that turns enumerations into iterators
Function<Enumeration<String>, Iterator<String>> eumerationToIteratorFunction = new Function<Enumeration<String>, Iterator<String>>() {
public Iterator<String> apply(Enumeration<String> enumeration) {
return Iterators.forEnumeration(enumeration);
}
};
// transform the enumerations into iterators, using the function
Collection<Iterator<String>> iterators = Collections2.transform(map.values(), eumerationToIteratorFunction);
// combine the iterators
Iterator<String> combinedIterator = Iterators.concat(iterators);
// convert the combined iterator back into an enumeration
Enumeration<String> combinedEnumeration = Iterators.asEnumeration(combinedIterator);
这是非常繁琐的,但Enumeration
是旧的和现代的API,而支持甚少。明智地使用静态导入可以减少一点。你甚至可以做整个事情在一个函数式的语句:
Map<?, Enumeration<String>> map = ...
Enumeration<String> combinedEnumeration = asEnumeration(concat(
transform(map.values(), new Function<Enumeration<String>, Iterator<String>>() {
public Iterator<String> apply(Enumeration<String> enumeration) {
return forEnumeration(enumeration);
}
})
));
这种方法被有效的利益 - 但这一切懒洋洋的,不会重复,直到你问它。尽管在这种情况下效率可能并不重要,但在这种情况下,只需简单的方法即可。
你能发布你的代码吗? –