共计 2415 个字符,预计需要花费 7 分钟才能阅读完成。
Map 依据值获取 key,找到一篇大佬的文章,本文是 CV 过去的,
原文:https://www.techiedelight.com…
1.entrySet() 办法
import java.util.HashMap;
import java.util.Map;
class Main
{public static <K, V> K getKey(Map<K, V> map, V value)
{for (Map.Entry<K, V> entry: map.entrySet())
{if (value.equals(entry.getValue())) {return entry.getKey();
}
}
return null;
}
// Java8
public static <K, V> K getKey(Map<K, V> map, V value)
{return map.entrySet().stream()
.filter(entry -> value.equals(entry.getValue()))
.findFirst().map(Map.Entry::getKey)
.orElse(null);
}
public static void main(String[] args)
{Map<String, Integer> hashMap = new HashMap();
hashMap.put("A", 1);
hashMap.put("B", 2);
hashMap.put("C", 3);
System.out.println(getKey(hashMap, 2)); // prints `B`
}
}
2.keySet() 办法
import java.util.HashMap;
import java.util.Map;
class Main
{public static <K, V> K getKey(Map<K, V> map, V value)
{for (K key: map.keySet())
{if (value.equals(map.get(key))) {return key;}
}
return null;
}
// Java8
public static <K, V> K getKey(Map<K, V> map, V value)
{return map.keySet()
.stream()
.filter(key -> value.equals(map.get(key)))
.findFirst().get();
}
public static void main(String[] args)
{Map<String, Integer> hashMap = new HashMap();
hashMap.put("A", 1);
hashMap.put("B", 2);
hashMap.put("C", 3);
System.out.println(getKey(hashMap, 2)); // prints `B`
}
}
3. 反转 Map
import java.util.HashMap;
import java.util.Map;
class MyHashMap<K, V> extends HashMap<K, V>
{Map<V, K> reverseMap = new HashMap<>();
@Override
public V put(K key, V value)
{reverseMap.put(value, key);
return super.put(key, value);
}
public K getKey(V value) {return reverseMap.get(value);
}
}
class Main
{public static void main(String[] args)
{MyHashMap<String, Integer> hashMap = new MyHashMap();
hashMap.put("A", 1);
hashMap.put("B", 2);
hashMap.put("C", 3);
System.out.println(hashMap.getKey(2)); // prints `B`
}
}
4.Guava’s BiMap 类
import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableBiMap;
class Main
{public static <K, V> K getKey(BiMap<K, V> map, V value) {return map.inverse().get(value);
}
public static void main(String[] args)
{BiMap<String, Integer> bimap = ImmutableBiMap.of("A", 1, "B", 2, "C", 3);
System.out.println(getKey(bimap, 2)); // prints `B`
}
}
5.Apache Commons Collections
import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.bidimap.DualHashBidiMap;
class Main
{public static <K, V> K getKey(BidiMap<K, V> map, V value) {return map.inverseBidiMap().get(value);
}
public static void main(String[] args)
{BidiMap<String, Integer> bimap = new DualHashBidiMap<>();
bimap.put("A", 1);
bimap.put("B", 2);
bimap.put("C", 3);
System.out.println(getKey(bimap, 2)); // prints `B`
}
}
原文:https://www.techiedelight.com…
正文完