//TestHashMapOfStringAndInteger.java
//Compare the output of this program with that of
//TestTreeMapOfStringAndInteger.java and try to
//explain the difference(s) that you see.

import java.util.HashMap;
import java.util.Scanner;

public class TestHashMapOfStringAndInteger
{
    public static void main(String[] args)
    {
        System.out.println("=====1=========================");
        //Create empty String/Integer HashMap, then display content and size.
        HashMap<String, Integer> hashMap;
        hashMap = new HashMap<String, Integer>();
        System.out.println(hashMap);
        System.out.println(hashMap.size());
        pause(1);

        System.out.println("=====2=========================");
        //Add one key/value pair and re-display.
        hashMap.put("Hello", 2);
        System.out.println(hashMap);
        System.out.println(hashMap.size());
        System.out.println(hashMap.get("Hello"));
        pause(2);

        System.out.println("=====3=========================");
        //Add another key/value pair and re-display.
        if (hashMap.containsKey("Hello"))
        {
            hashMap.put("Hello", 5);
        }
        System.out.println(hashMap);

        if (hashMap.containsKey("Good-bye"))
        {
            hashMap.put("Good-bye", 5);
        }
        else
        {
            hashMap.put("Good-bye", 7);
        }
        System.out.println(hashMap);
        System.out.println(hashMap.size());
        System.out.println(hashMap.get("Hello"));
        System.out.println(hashMap.get("Good-bye"));
        pause(3);

        System.out.println("=====4=========================");
        //Display all keys, all values and all key/value pairs.
        //Do it first the pre-Java 8 way ...
        for (String s : hashMap.keySet())
        {
            System.out.print(s + " ");
        }
        System.out.println();
        for (Integer i : hashMap.values())
        {
            System.out.print(i + " ");
        }
        System.out.println();
        for (String s : hashMap.keySet())
        {
            System.out.println(s + " " + hashMap.get(s));
        }
        pause(4);

        System.out.println("=====5=========================");
        //Display all keys, all values and all key/value pairs.
        //Now do it the Java 8 way ...
        hashMap.keySet().forEach(s -> System.out.print(s + " "));
        System.out.println();
        hashMap.values().forEach(i -> System.out.print(i + " "));
        System.out.println();
        hashMap.keySet().forEach
        (
            s -> System.out.println(s + " " + hashMap.get(s))
        );
        pause(5);
    }

    public static void pause(int pauseNumber)
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Pause " + pauseNumber);
        System.out.print("Press Enter to continue ... ");
        keyboard.nextLine();
    }
}
/*  Output (without the pauses):
    =====1=========================
    {}
    0
    =====2=========================
    {Hello=2}
    1
    2
    =====3=========================
    {Hello=5}
    {Hello=5, Good-bye=7}
    2
    5
    7
    =====4=========================
    Hello Good-bye
    5 7
    Hello 5
    Good-bye 7
    =====5=========================
    Hello Good-bye
    5 7
    Hello 5
    Good-bye 7
*/

