java.util.Map
附带entrySet()方法......
返回此映射中包含的映射的Set视图。
是否有单个方法调用或一系列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
循环,并希望在entrySet
上使用与Map
类似的方法,但我似乎无法找到一个。
答案 0 :(得分:2)
Apache Commons Collections提供了MapUtils.putAll
,它可以做你想要的,但是在你想要避免的for
循环逻辑的掩护下,你也可以自己做循环...
一般情况下,无法在Map
个条目中构造Set
,这些条目不需要您(或您正在调用的库函数)至少迭代一次条目 - 可能有特殊情况,例如如果你有一个你知道按键排序的条目列表,那么你可以编写一个只读的地图实现,它使用二进制搜索来找到密钥。
答案 1 :(得分:1)
Set
幕后使用Map
,而Set
中的值实际上是Map
中的键。因此,如果没有for
循环,就无法实现您想要/需要的东西。使用普通Java(没有其他花哨的框架),你只能这样做:
for(Map.Entry<String,String> entry : s) {
ms.put(entry.getKey(), entry.getValue());
}
答案 2 :(得分:0)
JDK不提供此类方法,但您可以根据需要使用Guava。提示:使用Transofrmers
或Maps
。你必须编写自己的“变换器” - 番石榴Function
的单行实现。如果将其实现为通用顶级类,则可以在以后重新使用它。
答案 3 :(得分:0)
java.util.Map#entrySet()
是关于添加元素的单视图操作,接受Set<Map.Entry<K, V>>
的构造函数似乎是一个非常具体且很少发生的情况。