Java Collection How to - Create Many to one mappings for String values








Question

We would like to know how to create Many to one mappings for String values.

Answer

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/*  w  w w  .  ja  v  a  2s. c  o m*/
public class Main {
  public static final void main(String[] ignored) {
    Map<Integer, List<String>> mapOfIntStrs = new HashMap<Integer, List<String>>();

    add(mapOfIntStrs, 1, "one");
    add(mapOfIntStrs, 1, "two");
    add(mapOfIntStrs, 1, "three");
    add(mapOfIntStrs, 2, "four");
    add(mapOfIntStrs, 2, "five");
    add(mapOfIntStrs, 3, "six");
    add(mapOfIntStrs, 3, "seven");


    Set<Integer> keySet = mapOfIntStrs.keySet();

    for (int i: keySet) {
      List<String> strList = mapOfIntStrs.get(i);
      System.out.println(i);
      for (String s : strList) {
        System.out.println("  " + s);
      }
    }
  }

  private static final void add(
      Map<Integer, List<String>> mapTo_addTo, int keyNum, String value) {
    if (mapTo_addTo.containsKey(keyNum)) {
      mapTo_addTo.get(keyNum).add(value);
    } else {
      List<String> strList = new ArrayList<String>();
      strList.add(value);
      mapTo_addTo.put(keyNum, strList);
    }
  }
}

The code above generates the following result.