java - 连接几个枚举?

标签 java resourcebundle

由于我们的特定需求,我不得不将 ResourceBundle 子类化。

但是,要覆盖getKeys(),我有点麻烦。此 getKeys 需要以某种方式从底层 ResourceBundle 的映射中串联起来。我该怎么做?

谢谢

编辑:提交时我想到了一个主意。基本上我们的每个 Module 都有一个 ResourceBundle,所以到目前为止我的代码看起来像这样:

public Enumeration<String> getKeys() {
        ArrayList<String> keys = new ArrayList<String>();

        for (Map.Entry<Module, ResourceBundle> entry : internalMap.entrySet()) {
            Enumeration<String> tmp = entry.getValue().getKeys();
            while (tmp.hasMoreElements()) {
                String key = tmp.nextElement();
                keys.add(key);
            }
        }

        return Collections.enumeration(keys);
    }

最佳答案

最简单的方法就是手动枚举枚举,将它们转储到集合中,然后返回该集合的枚举。

否则,您可以合并 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);
      }
   })
)); 

这种方法的好处是高效 - 它以惰性方式执行所有操作,并且在您提出要求之前不会进行迭代。不过,在您的情况下,效率可能并不重要,在这种情况下,只需采用简单的方法即可。

关于java - 连接几个枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333513/

相关文章:

java - 如何在 Android Studio 中使用谷歌云翻译 API?

java - 数组列表类方法,删除元素并返回新列表

java - 实例变量同步

java - 在 Maven 构建的 JAR 中多次包含不同名称的文件

java - 从struts2中的非默认位置加载资源包

Java加载资源Class.class.getResource vs <classname>.class.getResource

java - 不允许在 Java 方法覆盖上使用父类(super class)型的原因是什么?

java - 如何读取Spring Controller中的多个属性?

java - 列出所有可用的 ResourceBundle 文件

java - 比较器 java <E>