在Java 7中从set<Map.Entry>构建映射?



java.util.Map附带了entrySet()方法,该方法...

返回此映射中包含的映射的"设置"视图。

是否有单个方法调用或一系列 API 调用来使用 Java 7 API 从集合中重建集合,如标记我需要在此处放置什么? 在下面的代码示例中?

package so;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class SetMapExample {
    public static void main(String[] args) {
        Map<String, String> m = new HashMap<String, String>();
        m.put("k1", "v1");
        m.put("k2", "v2");
        Set<Map.Entry<String, String>> s = m.entrySet();
        Map<String, String> ms = s...   // what do I need to put here?
    }
}

如果可能的话,我不想使用for循环,并期望在MapentrySet类似的方法,但我似乎找不到。

Apache Commons Collections 提供了MapUtils.putAll可以做你想做的事,但在幕后,它只是做了你想要避免的for循环逻辑,所以你不妨自己做循环......

一般来说,没有办法从不需要您(或您正在调用的库函数)至少迭代一次条目的条目Set中构造Map - 可能存在特殊情况,例如,如果您有一个已知按键排序的条目列表,那么您可以在使用二叉搜索查找.key。

Set

后台使用MapSet中的实际上是Map中的键。因此,如果没有for循环,就不可能完成您想要/需要的东西。使用纯Java(没有其他花哨的框架),你只能做到这一点:

for(Map.Entry<String,String> entry : s) {
    ms.put(entry.getKey(), entry.getValue());
}

JDK没有提供这样的方法,但是如果你愿意,你可以使用Guava。提示:使用 TransofrmersMaps 。你必须编写自己的"转换器"——Guava Function的单行实现。如果将其实现为泛型顶级类,则可以稍后重用它。

java.util.Map#entrySet()是一个关于添加元素的单视图操作,接受Set<Map.Entry<K, V>>的构造函数似乎是一个非常具体且很少发生的情况。

最新更新