最簡單的方法就是手動枚舉枚舉,其轉儲到一個集合,然後返回的枚舉那個集合。
如果做不到這一點,你可以結合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);
}
})
));
這種方法被有效的利益 - 但這一切懶洋洋的,不會重複,直到你問它。儘管在這種情況下效率可能並不重要,但在這種情況下,只需簡單的方法即可。
你能發佈你的代碼嗎? –