Заполнение карты - Ява - PullRequest
1 голос
/ 20 января 2012

У меня проблема с заполнением Map в Java, я думаю, что это просто, но я не могу решить эту проблему.

Давайте посмотрим на это:

Map<Integer, HashMap<String, String>> lineArrayData = new HashMap<Integer, HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();

String singleData[];

int lineCounter = 0;
for ( String line : this.lines )
{
    singleData = line.split("\\|\\|");

    map.put("type", singleData[0]);
    map.put("text", singleData[1]);
    map.put("page", singleData[2]);
    map.put("x", singleData[3]);
    map.put("y", singleData[4]);

    lineArrayData.put(lineCounter, map);

    lineCounter++;
}

System.out.println(lineArrayData);

Iесть ввод

barcode||testowy test||1||100||100
text||texttstdasd||2||500||300

и мой вывод:

{0={text=texttstdasd, page=2, type=text, y=300, x=500}, 1={text=texttstdasd, page=2, type=text, y=300, x=500}}

что я сделал не так?

Ответы [ 3 ]

3 голосов
/ 20 января 2012

Переместите следующую строку внутри цикла:

HashMap<String, String> map = new HashMap<String, String>();

В противном случае каждая итерация изменяет одну и ту же внутреннюю карту.Конечным результатом является то, что внешняя карта содержит несколько ссылок на одну и ту же внутреннюю карту.

Вот исправленная версия:

for ( String line : this.lines )
{
    HashMap<String, String> map = new HashMap<String, String>();
    singleData = line.split("\\|\\|");
    ...
1 голос
/ 20 января 2012

Объявите HashMap<String, String> map = new HashMap<String, String>(); внутри цикла for.

0 голосов
/ 20 января 2012

Вы используете один и тот же экземпляр карты в цикле. И это должно быть

Map<Integer, Map<String, String>> lineArrayData = new HashMap<Integer, HashMap<String, String>>();
Map<String, String> map = new HashMap<String, String>();
...