我有一个像这样在Java中一个HashMap:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
然后,我填满它是这样的:
team1.put("United", 5);
我怎样才能拿到钥匙? 喜欢的东西: team1.getKey()
返回“联合”。
我有一个像这样在Java中一个HashMap:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
然后,我填满它是这样的:
team1.put("United", 5);
我怎样才能拿到钥匙? 喜欢的东西: team1.getKey()
返回“联合”。
一个HashMap
包含一个以上的关键。 您可以使用keySet()
来获取集合中的所有键。
team1.put("foo", 1);
team1.put("bar", 2);
将存储1
与关键的"foo"
和2
与键"bar"
。 遍历所有的键:
for ( String key : team1.keySet() ) {
System.out.println( key );
}
将打印"foo"
与"bar"
。
这是可行的,至少在理论上, 如果你知道索引:
System.out.println(team1.keySet().toArray()[0]);
keySet()
返回一组,让你转换设置为一个数组。
这个问题,当然,是一套不答应,让您的订单。 如果你只在你的HashMap的一个项目,你是好,但如果你有不止于此,这是最好的循环在地图上,如其他答案都做。
请确认。
https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
(使用java.util.Objects.equals
因为HashMap中可以包含null
)
使用JDK8 +
/**
* Find any key matching a value.
*
* @param value The value to be matched. Can be null.
* @return Any key matching the value in the team.
*/
private Optional<String> getKey(Integer value){
return team1
.entrySet()
.stream()
.filter(e -> Objects.equals(e.getValue(), value))
.map(Map.Entry::getKey)
.findAny();
}
/**
* Find all keys matching a value.
*
* @param value The value to be matched. Can be null.
* @return all keys matching the value in the team.
*/
private List<String> getKeys(Integer value){
return team1
.entrySet()
.stream()
.filter(e -> Objects.equals(e.getValue(), value))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
更多的“通用”和尽可能安全
/**
* Find any key matching the value, in the given map.
*
* @param mapOrNull Any map, null is considered a valid value.
* @param value The value to be searched.
* @param <K> Type of the key.
* @param <T> Type of the value.
* @return An optional containing a key, if found.
*/
public static <K, T> Optional<K> getKey(Map<K, T> mapOrNull, T value) {
return Optional.ofNullable(mapOrNull).flatMap(map -> map.entrySet()
.stream()
.filter(e -> Objects.equals(e.getValue(), value))
.map(Map.Entry::getKey)
.findAny());
}
或者,如果你是在JDK7。
private String getKey(Integer value){
for(String key : team1.keySet()){
if(Objects.equals(team1.get(key), value)){
return key; //return the first found
}
}
return null;
}
private List<String> getKeys(Integer value){
List<String> keys = new ArrayList<String>();
for(String key : team1.keySet()){
if(Objects.equals(team1.get(key), value)){
keys.add(key);
}
}
return keys;
}
您可以检索所有的Map
使用方法的键keySet()
现在,如果你需要的是一键搞定考虑到其价值 ,这是一个完全不同的问题和Map
将无法帮助你; 你需要一个专门的数据结构,像BidiMap
(地图,允许键和值之间的双向查找)从Apache的Commons Collections中 -也知道,几个不同的密钥可以被映射到相同的值。
private Map<String, Integer> _map= new HashMap<String, Integer>();
Iterator<Map.Entry<String,Integer>> itr= _map.entrySet().iterator();
//please check
while(itr.hasNext())
{
System.out.println("key of : "+itr.next().getKey()+" value of Map"+itr.next().getValue());
}
当你想获得的参数( United
)值,给出了它( 5
)你也可以考虑使用双向映射(例如,通过提供番石榴: http://docs.guava-libraries.googlecode.com/git/javadoc/com /google/common/collect/BiMap.html )。
如果你只需要一些简单,更验证的。
public String getKey(String key)
{
if(map.containsKey(key)
{
return key;
}
return null;
}
然后,你可以搜索任意键。
System.out.println( "Does this key exist? : " + getKey("United") );
一个解决方案可以是,如果你知道的关键位置,转换键为String数组和位置返回值:
public String getKey(int pos, Map map) {
String[] keys = (String[]) map.keySet().toArray(new String[0]);
return keys[pos];
}
试试这个简单的程序:
public class HashMapGetKey {
public static void main(String args[]) {
// create hash map
HashMap map = new HashMap();
// populate hash map
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.put(4, "four");
// get keyset value from map
Set keyset=map.keySet();
// check key set values
System.out.println("Key set values are: " + keyset);
}
}
public class MyHashMapKeys {
public static void main(String a[]){
HashMap<String, String> hm = new HashMap<String, String>();
//add key-value pair to hashmap
hm.put("first", "FIRST INSERTED");
hm.put("second", "SECOND INSERTED");
hm.put("third","THIRD INSERTED");
System.out.println(hm);
Set<String> keys = hm.keySet();
for(String key: keys){
System.out.println(key);
}
}
}
我要做的,这是非常简单的,但浪费内存的值一键映射并做oposite与价值使这个按键映射:
private Map<Object, Object> team1 = new HashMap<Object, Object>();
您使用是很重要的<Object, Object>
这样你就可以映射keys:Value
和Value:Keys
这样的
team1.put("United", 5);
team1.put(5, "United");
所以,如果你使用team1.get("United") = 5
和team1.get(5) = "United"
但是,如果你在对使用一些具体的方法上的对象之一,如果你再拍地图我会更好:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
private Map<Integer, String> team1Keys = new HashMap<Integer, String>();
然后
team1.put("United", 5);
team1Keys.put(5, "United");
记住,保持简单;)
要获取密钥 ,并将其值
如
private Map<String, Integer> team1 = new HashMap<String, Integer>();
team1.put("United", 5);
team1.put("Barcelona", 6);
for (String key:team1.keySet()){
System.out.println("Key:" + key +" Value:" + team1.get(key)+" Count:"+Collections.frequency(team1, key));// Get Key and value and count
}
将打印:重点:美国价值:5键:巴萨值:6