6
HashMap <String,String... strings> hm = new HashMap<String,String... strings>();

hm.put("Zara", "Pony","Cars", "Magic");
hm.put("John", "Horse","Flying", "Loving");

How can I do that? It's not letting me.

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
calimses
  • 301
  • 4
  • 16

5 Answers5

4

The elipsis (...) operator can only be used in method signatures. You could explicitly declare and create arrays:

Map<String, String[]> hm = new HashMap<>();

hm.put("Zara", new String[]{"Pony", "Cars", "Magic"});
hm.put("John", new String[]{"Horse", "Flying", "Loving"});

If you absolutely must use varags, you can wrap the call to Map#put with your own method:

public static void main(String[] args) {
    Map<String, String[]> hm = new HashMap<>();

    addToMap(hm, "Zara", "Pony", "Cars", "Magic");
    addToMap(hm, "John", "Horse", "Flying", "Loving");
}

private static void addToMap
    (Map<String, String[]> map, String key, String... values) {
    map.put(key, values);
}
Mureinik
  • 297,002
  • 52
  • 306
  • 350
2

Vararg notation is only for use with functions that allow it. It can not be used anywhere else.

You have to decide what you actually want your map values to be. Normally varargs is basically syntactic sugar for an array. However, a List or Set also makes sense here.

Either of the following would work:

  1. Array:

    HashMap <String, String[]> hm = new HashMap<>();
    hm.put("Zara", new String[] {"Pony","Cars", "Magic"});
    hm.put("John", new String[] {"Horse", "Flying", "Loving"});
    
  2. List:

    HashMap <String, List<String>> hm = new HashMap<>();
    hm.put("Zara", new ArrayList<String>());
    hm.get("Zara").add("Pony");
    hm.get("Zara").add("Cars");
    hm.get("Zara").add("Magic");
    hm.put("John", new ArrayList<String>());
    hm.get("John").add("Horse");
    hm.get("John").add("Flying");
    hm.get("John").add("Loving");
    
Mad Physicist
  • 107,652
  • 25
  • 181
  • 264
1

Closest you can do is use a `Map and create a method for that

public static void addToMap(Map<String, String[]> map, String key, String...values) {
    map.put(key, values);
}
daniu
  • 14,137
  • 4
  • 32
  • 53
0

See this question. Basically you need to do the following:

hm.put("Zara", new String[]{"Pony", "Cars", "Magic"});

Or if you want to declare it separetely:

String[] zaraValues = new String[]{"Pony", "Cars", "Magic"};
hm.put("Zara", zaraValues);
Yassine Badache
  • 1,810
  • 1
  • 19
  • 38
0

You might be looking for this:

HashMap<String, List<String>> hm = new HashMap<>();
hm.put("Zara", Arrays.asList("Pony", "Cars", "Magic"));
hm.put("John", Arrays.asList("Horse", "Flying", "Loving"));
Andreas
  • 154,647
  • 11
  • 152
  • 247