Получить все значения из ключей HashMap в ArrayList Java
Добрый день, это меня немного смущает (замораживание мозга!) и, похоже, что-то упускает. Имейте ArrayList, который я заполняю HashMap. теперь я вставляю свой HashMap и arraylist.
Map.put(DATE, value1);
Map.put(VALUE, value2);
arraylist.put(Map);
Поскольку мы разбираем JSON, аррайалист увеличивается в значительном размере. теперь мой вопрос заключается в том, как вы получаете значения с обеих клавиш карты в arraylist? я пробовал это
if(!list.isEmpty()){ // list is an ArrayList
for(int k = 0; k < list.size(); k++){
map = (HashMap)list.get(k);
}
}
Log.d(TAG, "map size is" + map.size());
String [] keys = new String[map.size()];
String [] date_value = new String[map.size()];
String [] value_values = new String[map.size()];
int i = 0;
Set entries = map.entrySet();
Iterator iterator = entries.iterator();
while(iterator.hasNext()){
Map.Entry mapping = (Map.Entry)iterator.next();
keys[i] = mapping.getKey().toString();
date_value[i] = map.get(keys[i]);
if(keys[i].equals(DATE)){
date_value[i] = map.get(keys[i]);
} else if(keys[i].equals(VALUE)){
value_values[i] = map.get(keys[i]);
}
i++;
}
Но я не могу получить все значения. размер карты всегда возвращает значение 2, которое является только элементом. как я могу получить все значения из ключей карты в ArrayList? Спасибо
Ответы
Ответ 1
Почему вы хотите заново изобрести колесо, когда у вас уже есть что-то, чтобы сделать вашу работу. Map.keySet()
метод дает вам набор всех ключей на карте.
Map<String, Integer> map = new HashMap<String, Integer>();
for (String key: map.keySet()) {
System.out.println("key : " + key);
System.out.println("value : " + map.get(key));
}
Кроме того, ваш первый for-loop выглядит странно для меня: -
for(int k = 0; k < list.size(); k++){
map = (HashMap)list.get(k);
}
Вы повторяете свой список и назначаете каждый элемент тому же reference - map
, который перезапишет все предыдущие значения. Все, что у вас будет, это последняя карта в вашем списке.
EDIT: -
Вы также можете использовать entrySet
, если вам нужен ключ и значение для вашей карты. Это было бы лучше для вас: -
Map<String, Integer> map = new HashMap<String, Integer>();
for(Entry<String, Integer> entry: map.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
P.S.: -
Ваш код выглядит мне смешно. Я бы предложил, оставить этот код в стороне и подумать о вашем design
еще раз. На данный момент, поскольку код стоит, очень сложно понять, что он пытается сделать.
Ответ 2
Попробуйте так...
Я рассматриваю HashMap
с ключом и значение типа String
, HashMap<String,String>
HashMap<String,String> hmap = new HashMap<String,String>();
hmap.put("key1","Val1");
hmap.put("key2","Val2");
ArrayList<String> arList = new ArrayList<String>();
for(Map.Entry<String,String> map : hmap.entrySet()){
arList.add(map.getValue());
}
Ответ 3
Поместите я ++ где-нибудь в конце вашего цикла.
В приведенном выше коде позиция 0 массива перезаписывается, потому что я не увеличивается в каждом цикле.
FYI: ниже выполняется избыточный поиск:
if(keys[i].equals(DATE)){
date_value[i] = map.get(keys[i]);
} else if(keys[i].equals(VALUE)){
value_values[i] = map.get(keys[i]);
}
заменить
if(keys[i].equals(DATE)){
date_value[i] = mapping.getValue();
} else if(keys[i].equals(VALUE)){
value_values[i] = mapping.getValue()
}
Другая проблема заключается в том, что вы используете i
для date_value
и value_values
. Это недействительно, если вы не намерены иметь нулевые значения в вашем массиве.
Ответ 4
Это невероятно старый, но я наткнулся на него, пытаясь найти ответ на другой вопрос.
Мой вопрос в том, как вы получаете значения с обеих клавиш карты в arraylist?
for (String key : map.keyset()) {
list.add(key + "|" + map.get(key));
}
Размер карты всегда возвращает значение 2, это всего лишь элементы
Я думаю, вас могут смутить функциональность HashMap
. HashMap
допускает только отношения от 1 до 1 на карте.
Например, если у вас есть:
String TAG_FOO = "FOO";
String TAG_BAR = "BAR";
и попытайтесь сделать что-то вроде этого:
ArrayList<String> bars = ArrayList<>("bar","Bar","bAr","baR");
HashMap<String,String> map = new HashMap<>();
for (String bar : bars) {
map.put(TAG_BAR, bar);
}
Этот код закончит установку записи ключа "BAR"
, которая будет связана с последним элементом в списке bars
.
В вашем примере вы, кажется, путаетесь, что есть только два элемента, но у вас есть только два ключа, которые заставляют меня поверить, что вы просто перезаписали каждое поле ключа несколько раз.
Ответ 5
Предположим, что у меня есть Hashmap с ключевым типом данных как KeyDataType
и тип данных значения как ValueDataType
HashMap<KeyDataType,ValueDataType> list;
Добавьте все предметы, которые вам нужны.
Теперь вы можете получить все ключи hashmap в списке.
KeyDataType[] mKeys;
mKeys=list.keySet().toArray(new KeyDataType[list.size()]);
Итак, теперь вы получили все ключи в массиве mkeys []
теперь вы можете получить любое значение, вызвав
list.get(mkeys[position]);