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
循环,并期望在Map
上entrySet
类似的方法,但我似乎找不到。
Apache Commons Collections 提供了MapUtils.putAll
可以做你想做的事,但在幕后,它只是做了你想要避免的for
循环逻辑,所以你不妨自己做循环......
一般来说,没有办法从不需要您(或您正在调用的库函数)至少迭代一次条目的条目Set
中构造Map
- 可能存在特殊情况,例如,如果您有一个已知按键排序的条目列表,那么您可以在使用二叉搜索查找.key。
Set
在后台使用Map
,Set
中的值实际上是Map
中的键。因此,如果没有for
循环,就不可能完成您想要/需要的东西。使用纯Java(没有其他花哨的框架),你只能做到这一点:
for(Map.Entry<String,String> entry : s) {
ms.put(entry.getKey(), entry.getValue());
}
JDK没有提供这样的方法,但是如果你愿意,你可以使用Guava。提示:使用 Transofrmers
或 Maps
。你必须编写自己的"转换器"——Guava Function
的单行实现。如果将其实现为泛型顶级类,则可以稍后重用它。
java.util.Map#entrySet()
是一个关于添加元素的单视图操作,接受Set<Map.Entry<K, V>>
的构造函数似乎是一个非常具体且很少发生的情况。