只有当每个键在map1中都有唯一的值时,我才会陷入如何将键值对从map1转移到map2的困境。
假设我有以下地图:
我想算法应该是:
代码片段:
public static <K,V> Map<K,V> unique (Map<K,V> m) {
Map<K,V> newMap = new ArrayMap<K,V>();
//Remember all values in the newMap.
Set<V> holding = new ArraySet<V>(newMap.values());
for (Map.Entry<K, V> graphEntry : m.entries()) {
//not sure.
}
return newMap;
}
我的想法是如何在正确的轨道上完成的吗?这里迷失了很多。
试试这个。。
Map<String, String> myMap1 = new TreeMap<String, String>();
myMap1.put("1", "One");
myMap1.put("2", "Two");
myMap1.put("3", "One");
myMap1.put("4", "Three");
myMap1.put("5", "Two");
myMap1.put("6", "Three");
Set<String> mySet = new HashSet<String>();
for (Iterator itr = myMap1.entrySet().iterator(); itr.hasNext();)
{
Map.Entry<String, String> entrySet = (Map.Entry) itr.next();
String value = entrySet.getValue();
if (!mySet.add(value))
{
itr.remove();
}
}
Map<String, String> myMap2 = new TreeMap<String, String>(myMap1);
System.out.println("Result :"+myMap2);
结果:{1=1,2=2,4=3}
看看番石榴酱。。这就是你需要的。。
虽然你的问题已经解决了,但是你可以看看下面的代码,使用Guava
API来完成你想要做的事情:-
public void removeDuplicateValue() {
Map<Integer, String> existingMap = new HashMap<Integer, String>();
existingMap.put(1, "a");
existingMap.put(2, "b");
// Create a new BiMap
BiMap<Integer, String> biMap = HashBiMap.create();
for (Integer val: existingMap.keySet()) {
// forcePut will add a key-value pair, and overwrite the duplicate value.
biMap.forcePut(val, existingMap.get(val));
}
// Create Inverse Map for newly created BiMap.
BiMap<String, Integer> inverseBiMap = biMap.inverse();
for(String val: inverseBiMap.keySet()) {
System.out.println(val + ":" + biMap.get(val));
}
}
从地图
public static <K, V> Map<K, V> createMap(Map<K, V> m) {
Map<K, V> map = new HashMap<K, V>();
Map<V, K> tmpMap = new HashMap<V, K>();
for(Map.Entry<K, V> entry : m.entrySet()) {
if (!tmpMap.containsKey(entry.getValue())) {
tmpMap.put(entry.getValue(), entry.getKey());
}
}
for(Map.Entry<V, K> entry : tmpMap.entrySet()) {
map.put(entry.getValue(), entry.getKey());
}
return map;
}
如果需要保留数据的保存顺序,请使用
LinkedHashMap
而不是HashMap
。
如果我从 2 个不同数据节点上运行的 2 个不同的映射器获得相同的键/值对,并且如果我使用单个化简器,如何消除重复的键/值对并防止它进入化简器? 我是否应该使用合并器,然后检查同一键是否存在重复值,然后在合并器中将其删除?但是组合器将来自单个映射器的所有键值对作为输入,对吗?
输入: 输出: 输入: 线程“main”java.lang.IllegalStateException中的异常:重复键-1.0 我怎么才能修好这个?
我有一个<code>map</code>,它要么更改值,要么将其设置为nil。然后我想从列表中删除nil条目。该列表不需要保存。 这是我目前拥有的: 我知道我可以做一个循环,并有条件地在另一个数组中收集,如下所示: 但这似乎不是那么惯用。有没有一种很好的方法可以在列表上映射函数,随时删除/排除 nils?
问题内容: 假设我们有一个具有这种格式的对象: 我想做一个通过键删除的函数: 问题答案: 该运算符允许您从对象中删除属性。 以下示例都做同样的事情。
假设我有这样的对象数组: 如何从每个对象中删除时间和单词属性?我的输出应该是这样的:
想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。 我所拥有的是, 我想要的是, 其中,