почему MultiMap.add() производит как {Test_Case: [[1.0, 2.0, 3.0]]} но это должно быть {Test_Case: [1.0, 2.0, 3.0]}

#java #collections #hashmap #multimap

#java #Коллекции #hashmap #multimap

Вопрос:

Это фрагмент кода, где ключ имеет тип String, а значение — List, но когда я собираю все элементы списка и добавляю их к объекту MultiMap, добавляя его как [[]], намерение использовать MultiMap связано с тем, что у меня один и тот же ключ с разными значениями (здесь «$.name»имеет несколько значений)

             List<String> header = funGetSheetColumns(wb, sSheetName);
            List valueList;
            MultiMap resMap = new MultiMap();

            for (int j = 0; j < header.size(); j  ) {
                valueList = new ArrayList();
                for (List data : tableRS) {

                    valueList.add(data.get(j));
                }

                resMap.add(header.get(j), valueList);
            }
 

это результат, который я получаю

 $.name: [[a, b, c], [a1, b1, c1], [a2, b2, c2]]
RequestBody: [[{
  "id": 0,
  "category": {
    "id": 0,
    "name": "string"
  },
  "name": "doggie",
  "photoUrls": [
    "string"
  ],
  "tags": [
    {
      "id": 0,
      "name": "string"
    }
  ],
  "status": "available"
}, {
  "id": 0,
  "category": {
    "id": 0,
    "name": "string"
  },
  "name": "doggie",
  "photoUrls": [
    "string"
  ],
  "tags": [
    {
      "id": 0,
      "name": "string"
    }
  ],
  "status": "available"
}, {
  "id": 0,
  "category": {
    "id": 0,
    "name": "string"
  },
  "name": "doggie",
  "photoUrls": [
    "string"
  ],
  "tags": [
    {
      "id": 0,
      "name": "string"
    }
  ],
  "status": "available"
}]]
}
 

но это не должно быть внутри массива массива[[]]

пожалуйста, дайте мне знать, чего мне не хватает.

Комментарии:

1. data.get(j) Возвращает ли список? Вы добавляете его в список (ValueList ), а затем добавляете ValueList на карту. Если это так, то ваш результат — это то, что я ожидаю увидеть. Должны ли вы просто добавлять data.get(j) непосредственно на карту?

Ответ №1:

Я думаю, вам нужно что-то вроде следующего (непроверенного) кода. Я никогда не использовал MultiMap, но похоже, что вы просто добавляете в него элементы, как будто это была обычная карта, и она заботится о добавлении их в коллекцию, сопоставленную с ключом.

         List<String> header = funGetSheetColumns(wb, sSheetName);
        MultiMap resMap = new MultiMap();

        for (int j = 0; j < header.size(); j  ) {
            for (List data : tableRS) {
                resMap.add(header.get(j),data.get(j));
            }

        }
 

В любом случае, это то, на что указывает эта ссылка.

Комментарии:

1. у меня это работает. Спасибо за реплей @DaveH