Я изучаю Java с помощью BlueJ, я создал класс с HashMap
(Integer, String)
который содержит идентификационный номер кого-то и его имя.
Я хочу, чтобы метод возвращал коллекцию всех ключей, удовлетворяющих условию, например, если их идентификационный номер начинается с 3, например. Я не могу понять, как это сделать.
И затем другой метод, который возвращает коллекцию значений, если они удовлетворяют условию, я думал, что он будет очень похож на предыдущий метод.
Я знаю, что мне нужно пройти через карту, но я не уверен, как написать условие, чтобы заполнить новую карту.
Вот пример, который возвращает все нечетные ключи в коллекции. Списки и наборы - это коллекции, аналогично тому, как 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
нет, это потому, что вы можете использовать одно и то же значение дважды на карте, но вы не можете использовать один и тот же ключ дважды.
Вы можете сделать следующее:
map.keySet().iterator();
В вашем случае (если карта не слишком большая), я получу все ключи карты, а затем обрабатываю их один за другим, чтобы математизировать мои критерии:
Map<Integer, String> myMap=getFromSomeWhere();
for(Integer i : myMap.keySet() {
String k=String.valueOf(i);
if(k.startsWith("3")) {
//do what you want
}
}
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
}
}
}