
// BidiMapTester.java
// https://www.tutorialspoint.com/commons_collections/commons_collections_bidimap.htm
// https://www.baeldung.com/commons-collections-bidi-map
// Andrew Davison, ad@coe.psu.ac.th, May 2023

/* A bi-directional map where the key-to-value relation 
   can be inverted, so the values can be used as keys. 

  Usage:
    > compile BidiMapTester.java
    > run BidiMapTester

   Other multi-map examples:
      * MultiKeyMapTester.java
      * PartialMultiKeyMapTester.java
      * MultiValuedMapTester.java

   Also see:
     LRUMapTester.java
     OrderedMapTester.java
     ExpiringMapTester
     TransformedMapTester
     SplitMapTester
     PredicateMapTester.java
   and
     MapUtilsTester.java

*/


import org.apache.commons.collections4.*;
import org.apache.commons.collections4.bidimap.*;


public class BidiMapTester
{
  public static void main(String[] args)
  {
    BidiMap<String, String> bidi = new TreeBidiMap<>();
    bidi.put("One", "1");
    bidi.put("Two", "2");
    bidi.put("Three", "3");
    System.out.println("Original Map: " + bidi);

    System.out.println("Get value of 'One': " + bidi.get("One"));
    System.out.println("Get key of 1: " + bidi.getKey("1"));

    System.out.println("\nRemove 1 value");
    bidi.removeValue("1");
    System.out.println("Modified Map: " + bidi);

    BidiMap<String, String> invertedMap = bidi.inverseBidiMap();
    System.out.println("\nInverted Map: " + invertedMap);
  } /* main */


}  // end of BidiMapTester class