2014-05-15 5 views
2

У меня есть Multimap, который имеет несколько аналогичных значений:Граф вхождения в Multimap

{Entertainment=[5], Food=[2, 2, 2], Products=[11], Health & Beauty=[3]} 

Как подсчитать общее количество этих ключей, так что он рассчитывает следующим образом?

Entertainment = 1 
Food = 3 
Products = 1 
Health & Beauty = 1 

Число внутри массива - это идентификатор категории, так что еда имеет 3 вхождения.

ответ

10

Либо multimap.get(key).size(), либо multimap.keys().count(key) должно работать.

Documentation

+0

Проблема с этим - это петли со всеми доступными ключами, включая Пищу, которая имеет размер 3. Она также петляет 3 раза из-за этого. – AimanB

+0

@AimanB: Что заставляет вас думать об этом? – ColinD

+2

О, вы говорите о переходе по клавишам: просто зациклируйте на 'keySet()', а не на 'keys()', чтобы получить каждый ключ только один раз. – ColinD

1

Предполагая, что ваша карта объявляется следующим образом: MultiMap<String, Integer> map, вы можете сделать следующее:

for (String key : map.keySet()) { 
    int count = map.get(key).size(); 
} 
+0

Он также считает Пищу как 3 раза. Всего будет 6, вместо этого я хочу только 4 (Entertainment, Food, Products, Health & Beauty) – AimanB

+0

Да, это должно быть 'for (String key: map.keySet())' вместо этого. – ColinD

+0

Спасибо, я отредактировал свой ответ. –

0

Используя asMap(), вы можете получить Map<String, Collection<Integer>> представление Multimap, от которого это легко получить счет напрямую без нескольких поисков:

for (Map.Entry<String, Collection<Integer>> entry : multimap.asMap().entrySet()) { 
    System.out.println(entry.getKey() + " = " + entry.getValue().size()); 
} 

Примечание: для получения Set ключей на Multimap вам необходимо позвонить keySet(), неkeys() (что действительно повторяет ключ столько раз, сколько имеет значения).

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