首页 > 解决方案 > 如何使用 Java 流查找不同对象的计数

问题描述

我有一个 Thing 对象列表:

class Thing {
    public String id;
    public String name;
}

List<Thing> lst包含以下内容;

[{'1', 'AB'},{'2', 'CD'},{'1', 'AB'},{'1','AB'},{'2','CD'},{'3','EF'}]

现在我想使用 Java 流或任何 util 函数来获得对 id 的不同计数:我希望输出是,

id   count
1    3
2    2 
3    1

我怎样才能做到这一点?

标签: javacountjava-streamdistinct

解决方案


您可以使用属性获取它Collectors.groupingByid然后counting它的出现为:

List<Thing> objects = new ArrayList<>(); // initalise as in the question 
Map<String, Long> countForId = objects.stream()
        .collect(Collectors.groupingBy(Thing::getId, Collectors.counting()));

推荐阅读