Ik heb een Hashmap in Java zoals deze:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
Dan vul ik het als volgt in:
team1.put("United", 5);
Hoe kan ik de sleutels krijgen? Iets als: team1.getKey()
om “United” terug te geven.
Antwoord 1, autoriteit 100%
Een HashMap
bevat meer dan één sleutel. Je kunt keySet()
gebruiken om de set van alle sleutels te krijgen.
team1.put("foo", 1);
team1.put("bar", 2);
bewaart 1
met sleutel "foo"
en 2
met sleutel "bar"
. Om alle sleutels te herhalen:
for ( String key : team1.keySet() ) {
System.out.println( key );
}
drukt "foo"
en "bar"
af.
Antwoord 2, autoriteit 16%
Dit is mogelijk, althans in theorie, alsu de index kent:
System.out.println(team1.keySet().toArray()[0]);
keySet()
retourneert een set, dus je converteert de set naar een array.
Het probleem is natuurlijk dat een set niet belooft je bestelling te houden. Als je maar één item in je HashMap hebt, zit je goed, maar als je er meer hebt, kun je het beste over de kaart lopen, zoals andere antwoorden hebben gedaan.
Antwoord 3, autoriteit 7%
Controleer dit.
https://docs.oracle.com /javase/8/docs/api/java/util/HashMap.html
(Gebruik java.util.Objects.equals
omdat HashMap null
kan bevatten)
JDK8+ gebruiken
/**
* 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> findKey(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> findKeys(Integer value){
return team1
.entrySet()
.stream()
.filter(e -> Objects.equals(e.getValue(), value))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
Meer “algemeen” en zo veilig mogelijk
/**
* 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> findKey(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());
}
Of als je op JDK7 zit.
private String findKey(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> findKeys(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;
}
Antwoord 4, autoriteit 2%
Je kunt alle sleutels van de Map
ophalen met de methode keySet()
. Als je nu een sleutelnodig hebt met zijn waarde, dan is dat een heel andere zaak en Map
zal je daar niet helpen; je hebt een gespecialiseerde gegevensstructuur nodig, zoals BidiMap
(een kaart die bidirectionele opzoeking tussen sleutel en waarden mogelijk maakt) van Apache’s Commons-verzamelingen– houd er ook rekening mee dat verschillende sleutels kunnen worden toegewezen aan dezelfde waarde.
Antwoord 5
Omdat u een argument (United
) wilt krijgen waarvoor de waarde wordt gegeven (5
), kunt u ook overwegen een bidirectionele kaart te gebruiken (bijv. geleverd door Guava: http://docs.guava-libraries.googlecode .com/git/javadoc/com/google/common/collect/BiMap.html).
Antwoord 6
Als je gewoon iets simpels en meer een verificatie nodig hebt.
public String getKey(String key)
{
if(map.containsKey(key)
{
return key;
}
return null;
}
Vervolgens kunt u naar elke sleutel zoeken.
System.out.println( "Does this key exist? : " + getKey("United") );
Antwoord 7
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());
}
Antwoord 8
Gebruik functionele bewerking voor snellere iteratie.
team1.keySet().forEach((key) -> {
System.out.println(key);
});
Antwoord 9
Een oplossing kan zijn, als u de sleutelpositie kent, de sleutels om te zetten in een String-array en de waarde in de positie terug te geven:
public String getKey(int pos, Map map) {
String[] keys = (String[]) map.keySet().toArray(new String[0]);
return keys[pos];
}
Antwoord 10
Probeer dit eenvoudige programma:
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);
}
}
Antwoord 11
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);
}
}
}
Antwoord 12
Om sleutels in HashMap te krijgen, hebben we de methode keySet() die aanwezig is in het pakket java.util.Hashmap
.
vb:
Map<String,String> map = new Hashmap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
// Now to get keys we can use keySet() on map object
Set<String> keys = map.keySet();
Nu hebben sleutelsal uw sleutels beschikbaar op de kaart.
vb: [sleutel1,sleutel2]
Antwoord 13
Wat ik zal doen, wat heel eenvoudig is, maar geheugen verspilt, is om de waarden toe te wijzen met een sleutel en het tegenovergestelde te doen om de sleutels toe te wijzen met een waarde waardoor dit:
private Map<Object, Object> team1 = new HashMap<Object, Object>();
het is belangrijk dat u <Object, Object>
gebruikt, zodat u keys:Value
en Value:Keys
op deze manier kunt toewijzen
team1.put("United", 5);
team1.put(5, "United");
Dus als je team1.get("United") = 5
en team1.get(5) = "United"
gebruikt
Maar als je een specifieke methode gebruikt op een van de objecten in de paren, kan ik beter een andere kaart maken:
private Map<String, Integer> team1 = new HashMap<String, Integer>();
private Map<Integer, String> team1Keys = new HashMap<Integer, String>();
en dan
team1.put("United", 5);
team1Keys.put(5, "United");
en onthoud, houd het simpel 😉
Antwoord 14
Om Sleutelen de waarde
. te krijgen
bijv.
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
}
Wordt afgedrukt:Sleutel: United Waarde:5
Sleutel: Barcelona Waarde:6