2014-02-08 2 views
0

У меня есть этот ArrayList из HashMaps ->ArrayList<HashMap<String, String>>ArrayList.contains для ArrayList с HashMaps

Как можно легко проверить, если HashMap содержит определенное значение? Я не хочу вручную перебирать весь список. Я ищу альтернативу ArrayList.contains(), которая работает для этого случая.

Например: Скажем, я поставил следующие значения Hashmap

map.put(TAG_ID, id); 
map.put(TAG_TITLE, title); 
map.put(TAG_DESCRIPTON, description); 

, а затем добавить добавляйте это мой ArrayList - arrayList.add(map) Дело в том, что я не хочу, чтобы добавить дублированный идентификатор в ArrayList.

+0

«Как я могу легко проверить, если HashMap содержит определенное значение?» Какой hashmap, вы можете иметь много в ArrayList? –

+0

Первый вопрос - зачем использовать 'ArrayList' ??? –

+1

«Дело в том, что я не хочу добавлять дублированный идентификатор к arraylist». Я думаю, вы должны перепроектировать свои структуры. –

ответ

0

1) Основываясь на вашем 1-м комментарии, вы должны подумать об использовании
HashMap<String, HashMap<String, String>>.

Для ключа внешнего HashMap используйте значение ID из внутренних HashMaps.
Для внутренних HashMaps просто продолжайте делать то, что вы делаете.

2) На основе вашего 2 комментария, вы можете думать о расширении ArraList и
overrding содержит, но это звучит для меня как излишним и неправильным образом
идти вообще. ArrayList.contains() все еще выполняет итерацию и проверку,
Я не понимаю, почему вы не хотите итерации в вашем случае.

1

Вы должны переосмыслить свой дизайн. Используйте объект вместо Map для представления того, что вы храните. Затем используйте Map для отслеживания коллекции указанных объектов. Это автоматически обработает дублирующийся случай, о котором вы упоминали, и не позволит вам хранить несколько Map и пропустить их.

public class Item { 
    String id; 
    String title; 
    String description; 
} 

HashMap<String, Item> map = new HashMap<String, Item>(); 
map.put(item.id, item); 
+0

Есть ли способ достичь этого, сохраняя текущий дизайн? Это на самом деле часть проекта Android - значения arraylist много используются в других случаях. – user3285413

+0

Если у вас есть свобода изменить все, я бы пошел с моим ответом. Если вы должны продолжать использовать 'Map' для представления объектов, я бы пошел с [peter ответ .petrov] (http://stackoverflow.com/a/21649791/722760) .Если вы должны продолжать использовать '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' 'contains', которая выполняет итерацию по списку и проверяет каждую карту, как вы упомянули в своем вопросе. –

-1

вы можете использовать это предположим, вы имеете ArrayList называемый список содержит три HashMaps

for(HashMap<String ,String> h : list) 
    { 
     String name =h.get("name"); 
     String age= h.get("age"); 
     String address =h.get("address"); 

     //some code here for the var :) 
    } 
+0

OP заявила, что он не хочет вручную перебирать списки. (Возможно ли это или нет, я не знаю но сейчас) – skiwi

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