
// SplitMapTester.java
// Andrew Davison, ad@coe.psu.ac.th, May 2023

/* TransformedSplitMap is a more powerful form of 
   TransformedMap which lets the key and value types
   be changed.

   Also see TransformedMapTester.java


  Usage:
    > compile SplitMapTester.java
    > run SplitMapTester

   Also see:
     LRUMapTester.java
     OrderedMapTester.java
     ExpiringMapTester
     TransformedMapTester
     PredicateMapTester.java
   and
     MapUtilsTester.java

*/

import java.util.*;

import org.apache.commons.collections4.*;
import org.apache.commons.collections4.map.*;
import org.apache.commons.collections4.splitmap.*;


public class SplitMapTester 
{
  public static void main(String[] args) 
  {
    Map<String, String> map = new HashMap<>();    
          // the underlying map: uses K-V, which are the get values

    // TransformedSplitMap
    // J, K, U, V :  J-U (which can be put) 
    //           ==> K-V (which can be get)
    TransformedSplitMap<Integer, String, Integer, String> mp = 
       TransformedSplitMap.transformingMap(map,
             k -> "key-"+k,     // J ==> K; int -> String
             v -> "val-"+v);    // U ==> V; int -> String

    System.out.println("Put 5-17");
    mp.put(5, 17);   // J-U, the put values

    System.out.println("Put 9-23");
    mp.put(9, 23);   // J-U

    System.out.println("\nResulting map");
    System.out.println(map);

    System.out.println("Get key-5: " + mp.get("key-5"));
    System.out.println("Get key-9: " + mp.get("key-9"));
  }  // end of main()

}  // end of SplitMapTester class
