Java:计算HashMap中的项目总数<string,arraylist <string =“”>&gt; </string,>

时间:2011-03-31 08:14:52

标签: java collections

我有这个HashMap<String, ArrayList<Item>>,有没有办法计算地图中所有列表中的项目总数而不通过所有列表?

或者我应该遍历地图和所有列表?

8 个答案:

答案 0 :(得分:17)

使用为HashMap定义的size()方法。

HashMap<String, ArrayList<Item>> hMap = new LinkedHashMap<String, ArrayList<Item>>();
int hSize;
/*
    put/remove operations

*/

hSize = hMap.size(); // Gives the total no. of elements of HashMap

答案 1 :(得分:13)

从Java 8开始,您可以通过单行代码实现这一目标:

Integer sum = map.values().stream().mapToInt(List::size).sum();

答案 2 :(得分:11)

您可能希望看到Google Guava并使用Multimap代替。 Multimap.size()方法将提供您想要的答案。

答案 3 :(得分:7)

您需要迭代List<Item>中的Map值并计算总数。 Map并不了解您所投入的价值,因此无法为您提供全面的便利。您需要的代码非常简单:

int total = 0;
for (List<Item> list : map.values()) {
    total += list.size();
}

答案 4 :(得分:2)

由于Map本身没有关于存储在其中的值的先验知识,除了它们是Object s(因此不能期望对它们执行任何操作,除了调用{ {1}},toString()和/或equals())除了迭代其元素并手动计算总和之外别无他法。

答案 5 :(得分:2)

Multimap听起来像是正确的选择,但你可以做到

public static <K, V> int count(Map<K, ? extends Collection<V>> map) {
    int count = 0;
    for (Collection<V> coll : map.values()) count += coll.size();
    return count;
}

顺便说一句:你可能想要数来返回一个长的;)

答案 6 :(得分:-1)

如果还有人仍在寻找答案

这是发布的代码

    Iterator<Map.Entry<Integer, ArrayList<ShortListedFlats>>> iter = rentShortListedFlats
            .entrySet().iterator();

    while (iter.hasNext()) {
        ArrayList<ShortListedFlats> shortLists = iter.next().getValue();

        counter = counter + shortLists.size();

    }

答案 7 :(得分:-2)

是的,你需要一个for循环:

public static int countItems(HashMap<String, ArrayList<Item>> yourMap){
    int counter = 0;
    for(ArrayList<Item>> list: yourMap.values()){
        counter += list.size();
    }
    return counter;
}