Wie kann ich den dritten Wert für den ersten Schlüssel in dieser Karte erhalten? Ist das möglich?
Wie kann ich den dritten Wert für den ersten Schlüssel in dieser Karte erhalten? Ist das möglich?
Antworten:
Es gibt Bibliotheken, um dies zu tun, aber der einfachste einfache Java-Weg besteht darin, eine Mapder folgenden zu erstellen List:
Map<Object,ArrayList<Object>> multiMap = new HashMap<>();
Es hört sich so an, als ob Sie nach einer Multimap suchen . Guava hat verschiedene MultimapImplementierungen, die normalerweise über die MultimapsKlasse erstellt werden.
Ich würde vorschlagen, dass die Verwendung dieser Implementierung wahrscheinlich einfacher ist, als Ihre eigene zu rollen, herauszufinden, wie die API aussehen sollte, sorgfältig nach einer vorhandenen Liste zu suchen, wenn Sie einen Wert hinzufügen usw. Wenn Ihre Situation eine besondere Abneigung gegen Bibliotheken von Drittanbietern aufweist Vielleicht lohnt es sich, das zu tun, aber ansonsten ist Guava eine fabelhafte Bibliothek, die Ihnen wahrscheinlich auch mit anderem Code helfen wird :)
Zum Beispiel:
Map<Object,Pair<Integer,String>> multiMap = new HashMap<Object,Pair<Integer,String>>();
wobei das Paireine parametrische Klasse ist
public class Pair<A, B> {
A first = null;
B second = null;
Pair(A first, B second) {
this.first = first;
this.second = second;
}
public A getFirst() {
return first;
}
public void setFirst(A first) {
this.first = first;
}
public B getSecond() {
return second;
}
public void setSecond(B second) {
this.second = second;
}
}
Dies ist, was ich in der Antwort einer ähnlichen Frage gefunden habe
Map<String, List<String>> hm = new HashMap<String, List<String>>();
List<String> values = new ArrayList<String>();
values.add("Value 1");
values.add("Value 2");
hm.put("Key1", values);
// to get the arraylist
System.out.println(hm.get("key1"));
ERGEBNIS: [Wert 1, Wert 2]
Hast du so etwas?
HashMap<String, ArrayList<String>>
In diesem Fall können Sie Ihre ArrayList durchlaufen und mit arrayList.get (i) das gewünschte Element abrufen.
Eine Standard-Java-HashMap kann nicht mehrere Werte pro Schlüssel speichern. Jeder neue Eintrag, den Sie hinzufügen, überschreibt den vorherigen.
Ich habe den Blog bei einer zufälligen Suche gefunden. Ich denke, dies wird dabei helfen: http://tomjefferys.blogspot.com.tr/2011/09/multimaps-google-guava.html
public class MutliMapTest {
public static void main(String... args) {
Multimap<String, String> myMultimap = ArrayListMultimap.create();
// Adding some key/value
myMultimap.put("Fruits", "Bannana");
myMultimap.put("Fruits", "Apple");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Vegetables", "Carrot");
// Getting the size
int size = myMultimap.size();
System.out.println(size); // 4
// Getting values
Collection<String> fruits = myMultimap.get("Fruits");
System.out.println(fruits); // [Bannana, Apple, Pear]
Collection<string> vegetables = myMultimap.get("Vegetables");
System.out.println(vegetables); // [Carrot]
// Iterating over entire Mutlimap
for(String value : myMultimap.values()) {
System.out.println(value);
}
// Removing a single value
myMultimap.remove("Fruits","Pear");
System.out.println(myMultimap.get("Fruits")); // [Bannana, Pear]
// Remove all values for a key
myMultimap.removeAll("Fruits");
System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!)
}
}
Apache Commons-Sammlungsklassen sind die Lösung.
MultiMap multiMapDemo = new MultiValueMap();
multiMapDemo .put("fruit", "Mango");
multiMapDemo .put("fruit", "Orange");
multiMapDemo.put("fruit", "Blueberry");
System.out.println(multiMap.get("fruit"));
// Mango Orange Blueberry
Maven-Abhängigkeit
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 --
>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
Wenn ich an eine Karte mit zwei Schlüsseln dachte, musste ich sofort einen benutzerdefinierten Schlüssel verwenden, und das wäre wahrscheinlich eine Klasse. Es folgt die Schlüsselklasse:
public class MapKey {
private Object key1;
private Object key2;
public Object getKey1() {
return key1;
}
public void setKey1(Object key1) {
this.key1 = key1;
}
public Object getKey2() {
return key2;
}
public void setKey2(Object key2) {
this.key2 = key2;
}
}
// Create first map entry with key <A,B>.
MapKey mapKey1 = new MapKey();
mapKey1.setKey1("A");
mapKey1.setKey2("B");
HashMap - Einzelschlüssel und mehrere Werte mit Liste
Map<String, List<String>> map = new HashMap<String, List<String>>();
// create list one and store values
List<String> One = new ArrayList<String>();
One.add("Apple");
One.add("Aeroplane");
// create list two and store values
List<String> Two = new ArrayList<String>();
Two.add("Bat");
Two.add("Banana");
// put values into map
map.put("A", One);
map.put("B", Two);
map.put("C", Three);
Sie können Folgendes tun (nach Bedarf Zugriffsmodifikatoren hinzufügen):
Map<String,Map<String,String>> complexMap=new HashMap<String,Map<String,String>>();
Sie können Daten wie folgt einfügen:
Map<String,String> componentMap = new HashMap<String,String>();
componentMap.put("foo","bar");
componentMap.put("secondFoo","secondBar");
complexMap.put("superFoo",componentMap);
Die generierte Datenstruktur wäre:
{superFoo={secondFoo=secondBar, foo=bar}}
Auf diese Weise sollte jeder Wert für den Schlüssel eine eindeutige Kennung haben . Gibt auch O (1) für Abrufe an, wenn Schlüssel bekannt sind.
Schreiben Sie eine neue Klasse, die alle benötigten Werte enthält, und verwenden Sie das Objekt der neuen Klasse als Wert in Ihrer HashMap
HashMap<String, MyObject>
class MyObject {
public String value1;
public int value2;
public List<String> value3;
}
Hier ist der Code, wie man die Hashmap in Arrays extrahiert, eine Hashmap, die eine Arrayliste enthält
Map<String, List<String>> country_hashmap = new HashMap<String, List<String>>();
List<String> my = new ArrayList<String>();
arraylist.add("16873538.webp");
arraylist.add("16873539.webp");
country_hashmap.put("Malaysia", my);
// make another one
List<String> jpn = new ArrayList<String>();
soraru.add("16873540.webp");
soraru.add("16873541.webp");
country_hashmap.put("Japanese", jpn);
for(Map.Entry<String, List<String>> hashmap_data : country_hashmap.entrySet()){
String key = hashmap_data.getKey(); // contains the keys
List<String> val = hashmap_data.getValue(); // contains arraylists
// print all the key and values in the hashmap
System.out.println(key + ": " +val);
// using interator to get the specific values arraylists
Iterator<String> itr = val.iterator();
int i = 0;
String[] data = new String[val.size()];
while (itr.hasNext()){
String array = itr.next();
data[i] = array;
System.out.println(data[i]); // GET THE VALUE
i++;
}
}