在HashMap中查找值的数量?

时间:2016-03-14 16:40:31

标签: java dictionary hashmap

HashMap中查找总数的最佳/最有效方法是什么?

我不是指.size()方法,因为它计算键的数量。我想要所有键中的总数。

我想这样做,因为我的密钥是String,但我的值是List

7 个答案:

答案 0 :(得分:9)

在Java 8中,您还可以使用Stream API:

int total = map.values()
               .stream()
               .mapToInt(List::size) // or (l -> l.size())
               .sum()

这样做的好处是,您不必重复List<Foo>变量的for类型,就像在Java 8之前的解决方案中一样:

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

除此之外,虽然没有建议,但你也可以使用内联值而不需要临时变量:

System.out.println(map.values().stream().mapToInt(List::size).sum());

答案 1 :(得分:7)

最简单的是,迭代并添加列表大小。

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

// here is the total values size

答案 2 :(得分:3)

假设您有地图

Map<String, List<Object>> map = new HashMap<>();

您可以通过调用values()方法并为所有列表调用size()方法来执行此操作:

int total = 0;
Collection<List<Object>> listOfValues = map.values();
for (List<Object> oneList : listOfValues) {
    total += oneList.size();
}

答案 3 :(得分:3)

如果我正确理解了问题,那么您有一个Map<String, List<Something>>,并且您希望计算List个值中所有Map s中的项目总数。 Java 8提供了一种非常简单的方法,可以通过流式传输值,将它们映射到size()然后将它们相加来实现:

Map<String, List<Something>> map = ...;
int totalSize = map.values().stream().mapToInt(List::size).sum());

答案 4 :(得分:3)

从Java 8开始,给定Map<K, List<V>> map,您可以使用Stream API并具有:

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

这会使用stream()创建Stream个值,并使用mapToInt将每个值映射到其大小,其中mapper是方法引用List::size,引用{ {3}},并将结果与​​List#size()相加。

答案 5 :(得分:3)

使用Eclipse Collections,以下内容将使用MutableMap

MutableMap<String, List<String>> map = 
        Maps.mutable.of("key1", Lists.mutable.of("a", "b", "c"),
                        "key2", Lists.mutable.of("d", "e", "f", "g"));

long total = map.sumOfInt(List::size);

注意:我是Eclipse Collections的提交者。

答案 6 :(得分:0)

import java.util.HashMap;
public class Solution {  
    public static void main(String args[]) {
        int total = 0;
        HashMap<String,String> a = new HashMap<String,String>();
        a.put("1.","1");
        a.put("2.","11");
        a.put("3.","21");
        a.put("4.","1211");
        a.put("5.","111221");          
        for (String l : a.values()) {
            total ++;
        }
        System.out.println(total);       
    }
}