#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