Код HashMap не работает, поскольку не может быть применен к данным типам - PullRequest
1 голос
/ 21 апреля 2020

Создание хеш-карты с работником в качестве класса. Ключом является идентификатор работника (целое число), а значением является строка списка (имена работников), когда я выполняю следующий код работники.put.et c, как показано ниже: ...

метод вставлен в интерфейс java .util.Map не может быть применен к данным типам; воздал:. java .lang.integer java .util.List; найдено int java lang string; причина фактический аргумент java .lang.string не может быть преобразован et c et c

** import java .util. *; **

 public class Workers
    {
      private Map<Integer, List<String>>workers;

      public Workers() {
          workers = new HashMap<Integer,List <String>>();
      }
      public void populateMap() {
            workers.put("10", "Tim Jones");
            workers.put("11", "Sarah Sands");


      }

       public void printMap() {     
        for (Map.Entry entry : workers.entrySet()) {
            System.out.println("Key : " + entry.getKey() + " Value : "
                        + entry.getValue());

        } 
      }
      public void printMapValue(List <String> key) {
            if(workers.containsKey(key)) {
                System.out.println(workers.get(key));
            } else {
                System.out.println(key + " does not exist in the map");
            }
        }
      public void addMapEntry(int key, List<String> values){
          workers.put(key,values);

    }
    }

Ответы [ 2 ]

3 голосов
/ 21 апреля 2020

Вы пытаетесь поместить значение String в карту с типом значения List<String>. Вы должны обернуть эту строку списком, прежде чем пытаться добавить ее в список. С Java 8 computeIfAbsent это на самом деле довольно элегантно, и вам не нужно возиться со сложностью проверки, существует ли список или нет:

workers.computeIfAbset(10, k -> new ArrayList<>()).add("Tim Jones");

РЕДАКТИРОВАТЬ : Чтобы ответить на вопрос в комментариях, вы, конечно, можете сделать это без API Java 8, если сами проверите существование ключа:

int key = 10;
List<String> tmp = workers.get(key);
if (tmp !=  null) {
    tmp = new ArrayList<>();
    workers.put(key, tmp);
}
tmp.add("Tim Jones");
1 голос
/ 21 апреля 2020

Вы пытаетесь поместить строку в значение карты, но это список. проверьте этот код:

 public class Workers
{
  private Map<Integer, List<String>>workers;

  public Workers() {
      workers = new HashMap<Integer,List <String>>();
  }

 private populateMap(Map<Integer,List <String>> map, Integer workerId, String value) {
     if (! map.contains(workerId)){
         map.put(workerId, new ArrayList<String>());
     } 
     map.get(workerId).add(value);
 }


  public void populateMap() {
        populateMap(map,"10", "Tim Jones");
        populateMap(map,"11", "Sarah Sands");


  }

   public void printMap() {     
    for (Map.Entry entry : workers.entrySet()) {
        System.out.println("Key : " + entry.getKey() + " Value : "
                    + entry.getValue());

    } 
  }
  public void printMapValue(List <String> key) {
        if(workers.containsKey(key)) {
            System.out.println(workers.get(key));
        } else {
            System.out.println(key + " does not exist in the map");
        }
    }
  public void addMapEntry(int key, List<String> values){
      workers.put(key,values);

}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...