Hinzufügen eines Schlüssels mit einem leeren Wert zu Guave Multimap
Ich muß hinzufügen-Taste, um eine Guave Multimap mit einer leeren Sammlung als Wert. Wie kann ich dies erreichen?
Habe ich versucht, dieses:
map.put( "my key", null );
aber Aufruf von get() liefert eine Liste mit einem element, welches null ist. Ich arbeitete, um dieses, indem Sie Folgendes tun:
map.putAll("my key2", new ArrayList())
aber ich Frage mich, ob dies eine schlechte Sache zu tun? Ich weiß, Guave automatisch entfernt einen-Taste, wenn der Letzte Wert entfernt zu halten containsKey() konsistent. Was ist meine beste option?
- Wie über Sie erzählen uns, warum Sie glauben, Sie brauchen, um eine Multimap in einer Weise benehmen, es war nicht beabsichtigt?
- Es liegt einfach in der Natur der Daten. Ich habe eine Reihe von Schlüsseln, von denen einige Werte mit Ihnen verbunden sind, und ein paar, die nicht. (Der eigentliche Schlüssel/Werte kommen aus einer DB). Wenn dies eine schlechte Verwendung für Multimap, das ist in Ordnung, ich bin offen für andere Lösungen. Die original-impl in diesem code verwendet, eine Map<String, List<String>> und der Wechsel zu Multimap schien das nur natürlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Multimap
bewusst verbietet diesen Ansatz, und die von Ihnen vorgeschlagene workaround ist ein no-op-es wird nicht wirklich etwas tun.Den Weg
Multimap
funktioniert, ist, dassmultimap.get(key)
nie null zurück, sondern gibt immer einige Sammlung-möglicherweise leer. (Aber der RückhaltMultimap
Umsetzung wahrscheinlich nicht speichern tatsächlich etwas für die Schlüssel, und wenn ein Schlüssel nicht zugeordnet nichtleere Sammlung, es wird nicht z.B. erscheinen in derkeySet()
.Multimap
ist nicht einerMap<K, Sammlung<V>>
.)Wenn Sie möchten, anzeigen eine leere Sammlung, müssen Sie
Map<K, List<V>>
.Als javadoc umfasst, eine multimap ist konzeptionell eine Reihe von Schlüssel-Wert-Paare, wo die Schlüssel sind nicht unbedingt eindeutig, z.B. a=1, a=2, b=3. Wenn es keine Werte, die mit a, dann gibt es keine Schlüssel-Wert-Paare für ein, so eine existiert nicht in der multimap.
Eine Sache, die Sie tun können, ist eine getrennte
Set<K>
für das gesamte Universum von Tasten, die Sie interessieren, oder nur um die zusätzlichen Tasten, die entsprechen, um keine Werte. Eine weitere ist die Verwendung einesMap<K, Collection<V>>
oder eineMap<K, Something>
woSomething
enthält eine Sammlung, die möglicherweise oder möglicherweise nicht leer sein.