Как использовать аргумент для переменных для выполнения метода для карты с включенным набором - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь написать метод с аргументом для ключа карты и значения карты; значение является набором.

Мой заголовок метода:

addMapEntry(String aKey, Set<String> aCustomer)

Я не уверен, что заголовок правильный, но если это так, как бы я выполнил метод, потому что я пробовал что-то вроде:

map.AddMapEntry("one", "Sony");

Я просто получаю сообщения об ошибках типа:

method addMapEntry in class CompanyCatalogue cannot be applied to given types;
  required: java.lang.String,java.util.Set<java.lang.String>
  found: java.lang.String,java.lang.String
  reason: actual argument java.lang.String cannot be converted to java.util.Set<java.lang.String> by method invocation conversion

Я думаю, что проблема в том, что мне нужно использовать переменную в качестве значения для карты, поскольку у меня она работает без аргументов, а также с аргументом для ключа. Я не могу сопоставить аргумент значения со всем, что я могу использовать в методе.

переменная экземпляра

private Map<String, Set<String>> systemsSold;

Конструктор

public CompanyCatalogue()
   {
      systemsSold = new HashMap<String, Set<String>>();
   }

Мой метод

public void addMapEntry(String aUniqueKey, String aCustomer)
   {
      Set<String> newSet = new HashSet<String>();
      newSet.add("Joe");
      newSet.add("Mike");
      systemsSold.put(aUniqueKey, aCustomer);

   }

Это пошло мне на ум, поэтому любая помощь очень ценится.

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы передаете одну строку "Sony" в виде набора. Создайте экземпляр Set и передайте его в качестве фактического параметра:

Set<String> mySet = new HashSet<String>();
mySet.add("Sony");
mySet.add("Crocket");

map.addMapEntry("one", mySet);
0 голосов
/ 09 мая 2018

Второй аргумент объявлен как Set<String>, но вы пытаетесь передать String. Чтобы создать Set<String> из одного String, используйте Set<T> Collections.singleton(T) ( javadoc ):

map.addMapEntry("one", Collections.singleton("Sony"));

Обратите внимание, что одноэлементное множество является неизменным. Если вы намереваетесь изменить значение позже (например, путем добавления элементов), вы можете заключить его в new HashSet:

map.addMapEntry("one", new HashSet<>(Collections.singleton("Sony")));
...