Как вернуть ключи карты в соответствии с условием?

1

Я изучаю Java с помощью BlueJ, я создал класс с HashMap (Integer, String) который содержит идентификационный номер кого-то и его имя.

Я хочу, чтобы метод возвращал коллекцию всех ключей, удовлетворяющих условию, например, если их идентификационный номер начинается с 3, например. Я не могу понять, как это сделать.

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

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

Теги:
collections
bluej
map

4 ответа

1
Лучший ответ

Вот пример, который возвращает все нечетные ключи в коллекции. Списки и наборы - это коллекции, аналогично тому, как ArrayLists являются списками. Вы можете изменить Collection to List (или даже ArrayList) в этом примере, и он будет делать то же самое.

public Collection<Integer> getOddKeys() {
    // keySet is a method of Map that returns a Set containing all the keys (and no values).
    Collection<Integer> result = new ArrayList<Integer>();
    for(Integer key : map.keySet()) {
        if((key % 2) == 0) // if the key is odd...
            result.add(key); // ... then add it to the result
    }
    return result;
}

Вы должны иметь возможность изменить этот пример, чтобы вместо этого проверить значения - я не просто дам вам этот код, потому что он очень похож и легко понять, понимаете ли вы, как работает этот пример.

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

  • 0
    Спасибо, что помогли мне @immibis. Это как раз то, что мне нужно!
0

Вы можете сделать следующее:

  • Создать список держателей
  • Итератор над вашими ключами карты с помощью map.keySet().iterator();
  • Проверьте, запускается ли ключ с 3, если да, добавьте его в список ключей.
  • верните список ключей.
0

В вашем случае (если карта не слишком большая), я получу все ключи карты, а затем обрабатываю их один за другим, чтобы математизировать мои критерии:

Map<Integer, String> myMap=getFromSomeWhere();
for(Integer i : myMap.keySet() {
    String k=String.valueOf(i);
    if(k.startsWith("3")) {
        //do what you want
    }
}
-1
public void CountryAbbriviationMap(String input)
{
        map<string ,string> countrymap =new map<string ,string>{'Australia'=>'AUS','Argentina'=>'ARG', 'India'=>'IND'};

        for(string key : countrymap.keySet())
        {
            if(key.startsWithIgnoreCase('A') && input.startsWithIgnoreCase('A'))
            {
                system.debug(key); //TO GET KEYS
                system.debug(countrymap.get(key)); //TO GET VALUES 
            }
        }  
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню