答案 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);
}
}