Anfügen von Daten zum Anzeigen in Java
Ich habe eine Karte
Map<Integer, List<Object>> entireData;
Nun, ich bin hinzufügen einige Daten über putAll wie
entireData.putAll(someData);
wo someData zurück Map<Integer, List<Object>>
Nun habe ich eine andere Linie, die sagt
entireData.putAll(someMoreData);
die auch zurück Map<Integer, List<Object>>
, aber dadurch es über-schreibt den Inhalt des bestehenden entireData, wie kann ich die Anhängen?
InformationsquelleAutor Vivek | 2011-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten Zeile des Java-Map-Klasse Referenz:
Hmmm, das ist eigentlich nicht geschehen! putAll() ist das gleiche wie der Aufruf von put() für alle Elemente in der Quell-Sammlung.
Dies nicht wirklich Ihre Frage zu beantworten wenn du gefragt Anhängen und Sie haben eine Reihe von legitimen Antworten.
InformationsquelleAutor trojanfoe
Du willst ein Multimap von Google Guava. Umschreiben Ihr Beispiel mit Guave Multimap:
entireData.get(key)
gibt eineList<Object>
.putAll
wird nicht überschreiben alte Schlüssel, sondern fügen Sie die Werte der Schlüssel, um die vorhandenen Werte. Das ist auch viel schöner als der Umgang mit der Initialisierung derList
Instanzen selbst.InformationsquelleAutor sjr
InformationsquelleAutor willcodejavaforfood
Tasten sind einzigartig. Wenn
someMoreData
hat eine gleiche Taste wie die bereits vorhandenen Schlüssel inentireData
den Wert, d.h. die Liste der Objekt überschrieben werden.Jedoch können Sie mit einer Schleife in
someMoreData
und Anhängen für Schlüssel, die es inentireData
wieInformationsquelleAutor Nishant
Pro Standard -, Java-Maps-Karte einen Schlüssel auf einen Wert, als trojanfoe schreibt. Wenn das nicht ausreicht, um Ihre Bedürfnisse, müssen Sie eine Multi-Map-Implementierung (Eine Karte, die Karten von einem Schlüssel zu einer Sammlung von Werten).
Den beliebtesten Versionen können gefunden werden in beiden open-source-Frameworks, Google Guava und Apache Commons /Collections.
Guave Beispiel:
Ausgabe:
Commons Collections Beispiel:
Ausgabe:
Wie Sie sehen können, ist die Commons Collections-version ist viel einfacher, aber auch weniger leistungsfähig, und in der aktuellen version gibt es keine Unterstützung für Java 1.5 generics. Also ich würd das gehen mit Guave.
Multimap
viel einfach mit einemMultimaps.new[(Linked?Hash)|Tree]Multimap.create()
(ok, vielleicht, dass "regex" ist nicht perfekt 😉...auf jeden Fall +1 für die Demonstration, wie man die Generika Recht mit
newSetMultimap(Maps.newHashMap(), ...)
was ich benötigt.InformationsquelleAutor Sean Patrick Floyd
ähnlich willcodejavaforfood's keine Abhängigkeiten benötigt Antworten, aber mit einem entrySet statt für weniger HashMap Abfragen.
oder Nishant's die drops enthält Aufruf und fügt ein null-check aber mit entrySet
oder mit java 8
InformationsquelleAutor StevenWernerCS