Wenn Sie sich dafür entscheiden, anstelle des Standard-Java-Collections-Frameworks die Commons Collections-Bibliothek zu verwenden, können Sie dies problemlos erreichen.
Das BidiMap
-Interface in der Collections-Bibliothek ist eine bidirektionale Abbildung, die es Ihnen ermöglicht, einen Schlüssel auf einen Wert abzubilden (wie normale Abbildungen) und auch einen Wert auf einen Schlüssel abzubilden, sodass Sie Abfragen in beide Richtungen durchführen können. Das Abrufen eines Schlüssels für einen Wert wird durch die Methode getKey()
unterstützt.
Es gibt jedoch einen Haken, bidirektionale Abbildungen können keine mehreren Werte auf Schlüssel abbilden, und daher können Sie bidirektionale Abbildungen nicht verwenden, es sei denn, Ihr Datensatz hat 1:1-Zuordnungen zwischen Schlüsseln und Werten.
Wenn Sie auf die Java Collections-API vertrauen möchten, müssen Sie sicherstellen, dass die 1:1-Beziehung zwischen Schlüsseln und Werten beim Einfügen des Werts in die Abbildung besteht. Das ist leichter gesagt als getan.
Sobald Sie das sicherstellen können, verwenden Sie die Methode [entrySet()
](https://docs.oracle.com/javase/7/docs/api/java/util/Map.html#entrySet()), um die Menge der Einträge (Abbildungen) in der Map zu erhalten. Sobald Sie die Menge erhalten haben, deren Typ Map.Entry
ist, durchlaufen Sie die Einträge, vergleichen den [gespeicherten Wert](https://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html#getValue()) mit dem erwarteten und erhalten den entsprechenden Schlüssel.
Unterstützung für bidirektionale Abbildungen mit Generics finden Sie in Google Guava und den überarbeiteten Commons-Collections-Bibliotheken (letztere ist kein Apache-Projekt). Danke an Esko für den Hinweis auf den fehlenden generischen Support in Apache Commons Collections. Die Verwendung von Sammlungen mit Generics führt zu wartungsfähigerem Code.
Seit Version 4.0 unterstützt die offizielle Apache Commons Collections™-Bibliothek Generics.
Sehen Sie sich die Zusammenfassungsseite des Pakets "org.apache.commons.collections4.bidimap" für die Liste der verfügbaren Implementierungen des BidiMap
, OrderedBidiMap
und SortedBidiMap
Interfaces an, die jetzt Java-Generics unterstützen.