2012-02-23 2 views
0

У меня есть проблема на ArrayList и HashMapHashMap и ArrayList путаница поиска

В соответствии с моим требованием, я хранение данных в HashMap и после этого я создал список в виде списка>.

 HashMap<String,String> hashmap; 
     static List<HashMap<String,String>> hashmap_string; 

И при получении значения из базы данных и положить его на HashMap и ArrayList, как:

    contract_number=c.getString(c1); 
        Log.i("c1.getString,contract_number", contract_number); 
        String service_level=c.getString(c2); 
        hashmap=new HashMap<String, String>(); 
        hashmap.put(contract_number, service_level); 
        hashmap_string.add(hashmap); 

А теперь я хочу, чтобы получить значение как String, String

И когда я применяя этот код как:

   for(int i=0;i<hashmap_string.size();i++) 
       { 
        Log.i("arraylist", ""+hashmap_string.get(i)); 
       } 

Я получаю одно строковое значение в форме, как

   {Contract,ServiveValue} 

, но я хочу, чтобы разделить это на 2 строковых значения ... Кроме того, эти значения являются избыточными, и если я с помощью HashMap, то он не будет показывать мне избыточное значение.

Пожалуйста, помогите мне в этом ..

+0

Почему вы не используете только HashMap вместо этого. Если вам нужно получить 'Contract' и' ServiveValue' как единые значения, я думаю, что это лучший вариант. –

+0

Кажется, вы очень плохо переделываете свои данные. что вы пытаетесь решить таким образом? –

+0

Beacause HashMap не извлекает повторяющиеся значения, а значение моего контракта и уровня обслуживания имеет повторяющиеся значения. – Kanika

ответ

0

HashMap (и карты в целом) используются для нескольких один-к-одному отображения ключей и значений. Вы уверены, что вам это нужно? Глядя на свой код, похоже, вы используете карту как класс «Пара». Я бы пропустить список, и поместить все в одной и той же карте, а затем перебрать пар на карте:

// using tree map to have entries sorted on the key, 
// rather than the key's hash value. 
Map<String, String> data = new TreeMap<String, String>(); 
data.put("c1", "s1"); 
data.put("c2", "s2"); 

for (Map.Entry<String, String> entry : data.entrySet()) { 
    String contract = entry.getKey(); 
    String level = entry.getValue(); 
    Log.i("data", contract + " : " + level"); 
} 

бы выход (предполагающей TreeSet):

c1 : s1 
c2 : s2 

В качестве альтернативы, например, создать класс ContractServiceLevel, который содержит две строки (номер контракта и уровень обслуживания) и помещает экземпляры этого класса в ваш список.

EDIT:

public final class ContractServiceLevel { 
    public final String number; 
    public final String serviceLevel; 

    public ContractServiceLevel(String c, String s) { 
     number = c; 
     serviceLevel = s; 
    } 
} 

List<ContractServiceLevel> contracts = new ArrayList<ContractServiceLevel>(); 
contracts.add(new ContractServiceLevel("c1", "s1.1")); 
contracts.add(new ContractServiceLevel("c1", "s1.2")); 
contracts.add(new ContractServiceLevel("c2", "s2.1")); 

for (ContractServiceLevel contract : contracts) { 
    Log.i("data", contract.number + ":" + contract.servicveLevel); 
} 

выведет:

c1 : s1.1 
c1 : s1.2 
c2 : s2.1 
+0

Что о, если я положил – Kanika

+0

data.put ("c1", "s1"); и снова data.put («c1», s1 »); теперь он будет возвращать только 1 пару как« c1 »,« s1 »... и мой ключ и значение содержат дубликаты значений. Так как я могу решить эту проблему – Kanika

+0

Вы можете найти вариант списка, см. Мой отредактированный пост. – claesv

1

Кажется, вы что-то не хватает. Когда вы выполните hashmap_string.get(i), вы получите <HashMap<String,String>. Итак, это правильное значение из кода.

Что вы можете сделать, это:

 HashMap<String, String> hashMap2 = hashmap_string.get(i); 
     String value = hashMap2.get("your_key"); 

Другой путь, у вас уже есть два расщепляется строковые значения. вы можете получить это, используя keySet() и values() методов за hashMap2 Объект.

+0

Тем не менее он не извлекает повторяющиеся данные – Kanika

-2

Строковое значение = hashmap.get ("contract"); u получит значение как ServiveValue

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