парсинг на HashMap в Java - PullRequest
       13

парсинг на HashMap в Java

2 голосов
/ 03 февраля 2012

У меня простой вопрос.

Я установил:

HashMap<A, B> myMap = new HashMap<A, B>();

...
myMap.put(...)
...

Теперь я хочу пройти через myMap и получить все ключи (типа A). как я могу это сделать?

Я хочу получить все ключи из myMap по циклу и отправить их в "void myFunction (A param) {...}".

Ответы [ 8 ]

6 голосов
/ 30 мая 2013

Это более общий ответ, основанный на названии вопроса.

Синтаксический анализ ключей и значений с использованием entrySet()

HashMap<A, B> myMap = new HashMap<A, B>();

...
myMap.put(key, value);
...

for (Entry<A, B> e : myMap.entrySet()) {
    A key    = e.getKey();
    B value  = e.getValue();
}

//// or using an iterator:

// retrieve a set of the entries
Set<Entry<A, B>> entries = myMap.entrySet();
// parse the set
Iterator<Entry<A, B>> it = entries.iterator();
while(it.hasNext()) {
    Entry<A, B> e = it.next();
    A key   = e.getKey();
    B value = e.getValue();
}

Разбор ключей с помощью keySet()

HashMap<A, B> myMap = new HashMap<A, B>();

...
myMap.put(key, value);
...

for (A key   : myMap.keySet()) {
     B value = myMap.get(key);  //get() is less efficient 
}                               //than above e.getValue()

// for parsing using a Set.iterator see example above 

Подробнее о entrySet() против keySet() в вопросе Замечания по производительности для keySet () и entrySet () для Map .

Анализ значений с использованием values()

HashMap<A, B> myMap = new HashMap<A, B>();

...
myMap.put(key, value);
...

for (B value : myMap.values()) {
    ...
}

//// or using an iterator:

// retrieve a collection of the values (type B)
Collection<B> c = myMap.values();   
// parse the collection
Iterator<B> it = c.iterator();
while(it.hasNext())
  B value = it.next();
}
4 голосов
/ 03 февраля 2012

Вот как вы можете получить набор ключей:

Set<A> keys = myMap.keySet();

Я не знаю, что означает "передача".Я также не знаю, что означает "разбор" для HashMap.За исключением получения ключей от карты, этот вопрос не имеет никакого смысла.Голосование за закрытие.

2 голосов
/ 03 февраля 2012

myMap.keySet ()?Не уверен, что вы имеете в виду на самом деле.

2 голосов
/ 03 февраля 2012

map.keySet () вернет вам набор, содержащий все ключи .. отсюда вы можете проанализировать набор и получить все ключи

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

После передачи карты туда, куда вы ее передаете, метод / класс, заканчивающийся картой, сделает следующий вызов, чтобы получить набор ключей на карте.

Set<A> keys = myMap.keySet();
0 голосов
/ 27 апреля 2019

Если вы не удалите элементы с вашей карты, вы можете использовать это:

for(A k:myMap.keySet()) {
    //the correspending value is myMap.get(k))
}

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

public class TutoMap {

    public static void main(String[] args) {

        //Create a map
        Map<Integer, String> map = new HashMap<>();

        //add some elements to the map
        map.put(0, "a");
        map.put(5, "b");
        map.put(3, "c");
        map.put(4, "e");
        map.put(10, "d");

        //get the iterator of the Entry set
        Iterator iter = map.entrySet().iterator();

        //try to remove element of key = 4
        while (iter.hasNext()) {
            Map.Entry<Integer, String> ele = (Map.Entry<Integer, String>) iter.next();
            if (ele.getKey() == 4) {
                iter.remove();
            }
        }
    }
}
0 голосов
/ 03 февраля 2012

, если вы хотите получить все пары ключ-значение с карты
используйте map.keyset (), он вернет все ключи в наборе.
Теперь вы можете использовать итератор для итерации всех значений ключа
и использовать его в map.get (ключ).

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

Вы можете использовать Google Guava для фильтрации ваших коллекций. Примеры фильтрации, заказа и т. Д. Можно найти здесь

...