Java:计算HashMap <String,ArrayList <String >>中的项目总数

use*_*406 21 java collections

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

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

小智 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
Run Code Online (Sandbox Code Playgroud)

  • 这只会计算@linqu 提到的键值对的数量。因此,对以下键值使用 `hMap.size()`:`["key1", [Item1, Item2]], ["key2", [Item3, Item4]]` 只会返回 2,而不是我们想要 4因为有 4 个 `Item` 对象 (3认同)
  • 根据[docs](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#size--),这是不正确的.`HashMap.size()`"返回此映射中键 - 值映射的数量." (2认同)

lin*_*nqu 17

从Java 8开始,您可以使用单行程序实现这一目标:

Integer sum = map.values().stream().mapToInt(List::size).sum();
Run Code Online (Sandbox Code Playgroud)

  • 注意“不能从静态上下文中引用非静态方法‘大小’”错误 (2认同)

nan*_*nda 11

您可能希望查看Google Guava并使用Multimap而不是它.Multimap.size()方法将提供您想要的答案.

  • 不...查看源代码(http://code.google.com/p/guava-libraries/source/browse/trunk/src/com/google/common/collect/AbstractMultimap.java)第164-167行 (2认同)

Whi*_*g34 7

您需要迭代List<Item>您的值Map并计算总数.我们Map不知道你投入了什么价值,所以它无法提供一个能够让你获得总价值的设施.您需要的代码非常简单:

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