如何使用Java Stream API將列表中的元素映射到按其類型計數的元素?按類型計算元素
沒有流的例子看起來是這樣的:
List<Object> list = new ArrayList<>();
list.add("Hello");
list.add(Integer.valueOf(1));
list.add("World");
list.add(Double.valueOf(4.6));
list.add(Integer.valueOf(42));
list.add(new Object());
list.add(Integer.valueOf(4711));
Map<Class<? extends Object>, Integer> map = new HashMap<>();
for (Object item : list) {
if (map.containsKey(item.getClass())) {
int count = map.get(item.getClass());
map.put(item.getClass(), count + 1);
} else {
map.put(item.getClass(), 1);
}
}
然而,在我的生產代碼,它不是Object
名單,但有不同的實現的接口。
我的猜測,到目前爲止是這樣的:
workshops.stream().collect(Collectors.groupingBy(Object::getClass))
但我怎麼能這樣映射到Map<Object, Integer>
時Object
通過接口(如列表)取代,也將工作?
「Collectors.counting()」映射到「Long」這一事實背後的原因是什麼?特別是當'Collection.size()'返回一個'int'時? – hotzst
@hotzst流不一定來自集合,可能比集合有更多的元素。 –