HashMap и ArrayList путаница в поиске - PullRequest
0 голосов
/ 23 февраля 2012

У меня проблема с arraylist и hashmap

. В соответствии с моим требованием я сохраняю данные в 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, то он не будет показывать мне избыточное значение.

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

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

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

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

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

В противном случае у вас уже есть два значения разделенных строк. Вы можете получить это, используя keySet() и values() методы над hashMap2 Object.

0 голосов
/ 23 февраля 2012

String value = hashmap.get ("contract");вы получите значение как ServiveValue

0 голосов
/ 23 февраля 2012

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

// 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...