Переберите список и поместите данные в hashmap - PullRequest
2 голосов
/ 17 мая 2010

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

for(int i=0;i<list.size();i++) {
    HashMap hMap=new HashMap();
    hMap.put("Data", list);
}

Но когда мне нужно прочитать значение из hMap, я делаю так

Collection c = hMap.values();
Iterator itr = c.iterator();

while(itr.hasNext()) {
    System.out.println("next val is--"+itr.next());
}

next vali is--- напечатано в формате com.bean.xyz@23032bc[id=1], мне нужны точные данные, как мне это сделать?

Ответы [ 5 ]

2 голосов
/ 17 мая 2010

Я вижу здесь несколько проблем

  1. Вы получите только последний элемент списка в хэш-карте. Потому что вы создаете новую хэш-карту на каждой итерации, и ее ссылка теряется на следующей итерации.

  2. Вам необходимо реализовать метод toString в классе com.bean.xyz для вывода нужного элемента данных

1 голос
/ 17 мая 2010

A Map - это отображение ключей на значения. Для каждого элемента списка необходимо определить, какой должен быть ключ и какое должно быть значение.

Ваш оригинальный код:

for(int i=0;i<list.size();i++) {
    HashMap hMap=new HashMap();
    hMap.put("Data", list);
}

Это эффективно сопоставляет ключ "Данные" со значением list, повторяя это отображение несколько раз, но у вас есть только запись .

Вот пример взятия List<String> и построения карты из буквы в строку, начиная с этой буквы из списка.

    List<String> list = Arrays.asList(
        "abc", "def", "ghi", "ijk", "abracadabra"
    );
    Map<Character,String> map = new HashMap<Character,String>();
    for (String s : list) {
        map.put(s.charAt(0), s);
    }
    System.out.println(map); // prints "{g=ghi, d=def, a=abracadabra, i=ijk}"
    System.out.println(map.get('i')); // prints "ijk"
    System.out.println(map.containsKey('x')); // prints "false"

Обратите внимание, что "abc" "потеряно" на карте. Это потому, что вы можете сопоставить только один ключ с одним значением. С другой стороны, вы можете иметь Map<Character,Set<String>>, то есть карту от каждого ключа до набора значений. По сути, это мультикарта, и у Guava есть реализация.

Смежные вопросы

0 голосов
/ 17 мая 2010

Возможно, вы захотите изменить порядок заполнения HashMap следующим образом:

HashMap<String,xyz> hMap=new HashMap<String,xyz>();
for(int i=0;i<list.size();i++)
{
  hMap.put("Data"+i, list);
}

Где xyz - это объект com.bean.xyz, с которым вы работаете. Этот подход позволяет вам использовать возможности Generics в Java в объектах Collection, таких как HashMap.

Причина, по которой вы видите com.bean.xyz@23032bc [id = 1], заключается в том, что вашему бобу, вероятно, не определен метод toString для него. В отсутствие метода toString используется метод Object.toString, который возвращает адрес, где находится ваш объект в куче JVM. Если вы хотите увидеть что-то еще, вам придется переопределить метод toString в вашем объекте xyz.

public class xyz {
  ...
  public String toString () {
    return "hello world"; //put what you want to see here
  }
  ...
}
0 голосов
/ 17 мая 2010

Прежде всего, вы знаете, что ваша хеш-таблица будет содержать только одно значение, верно? Если вы хотите добавить все элементы из list в одну хеш-таблицу, вы должны вызвать HashMap hMap=new HashMap(); вне цикла for.

Чтобы вывести правильные данные, введите toString() для вашего типа или приведите его к правильному типу.

0 голосов
/ 17 мая 2010

Я не знаю, какой тип объектов вы пытаетесь напечатать. Но если это один из ваших объектов, которые вы пытаетесь распечатать, вы должны создать внутри класса класс метод toString, который переопределяет метод класса объекта.

public string toString()
{
    return "";
}

В операторе return вы можете вернуть некоторые атрибуты объектов.

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