使用java8计算数组列表中特定对象的出现次数

Kar*_*yan 2 java arraylist java-8

让我们说,我有一个数组列表:

catalog id--->901
Catalog name --->series277
catalog id--->901
Catalog name --->series277
catalog id--->545
Catalog name --->series285
catalog id--->545
Catalog name --->series285
catalog id--->545
Catalog name --->series285
catalog id--->546
Catalog name --->series685
catalog id--->546
Catalog name --->series685
catalog id--->40962
Catalog name --->series19348
catalog id--->40962
Catalog name --->series19348
catalog id--->40962
Catalog name --->series19348
catalog id--->40962
Run Code Online (Sandbox Code Playgroud)

从这个列表中,我想找到如下所示的出现次数.

catalog id--->901    -- 2
catalog id--->545    -- 3
catalog id--->546    -- 2
catalog id--->40962  -- 4
Run Code Online (Sandbox Code Playgroud)

我的目标是,基于id我想要创建循环以进一步迭代的出现次数.

请找到我的Arraylist创建的java代码

List<Catalog> catalogList2 = new ArrayList<Catalog>();
for (SearchHit hit1 : searchHits2)
{
  sourceAsMap2 = hit1.getSourceAsMap();
  catalog2 = new Catalog();
  catalog2.setId(String.valueOf(sourceAsMap2.get("catalog_id")));
  catalog2.setCatalog_name(String.valueOf(sourceAsMap2.get("catalog_name")));
  catalogList2.add(catalog2);
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

试图实现以下案例:

for(int i=0;i<catalogList2.size();i++) {

        // want to find the number of occurances for catalog.getId()
        //Then i want to create a loop based on the number of occurances of catalog id
        for(int i=0;i<catalog_id_occurances.size;i++)
        {
            //Have to do something.
        }

    }
Run Code Online (Sandbox Code Playgroud)

Ama*_*bra 7

您可以使用Streams:

catalogs.stream().collect(
                Collectors.groupingBy(Catalog::getId, Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)

输出:

jshell> catalogList.stream().collect(
   ...>                 Collectors.groupingBy(Catalog::getId, Collectors.counting()));
$43 ==> {901=2, 545=3, 546=2, 40962=4}
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

如果您想进一步操作输出或想要以某种客户格式打印,可以使用以下内容:

catalogList.stream().collect(Collectors.groupingBy(Catalog::getId, Collectors.counting())).entrySet().stream().map(p->"catalog id--->"+p.getKey()+"    -- "+p.getValue()).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

输出:

catalog id--->901    -- 2
catalog id--->545    -- 3
catalog id--->546    -- 2
catalog id--->40962  -- 4
Run Code Online (Sandbox Code Playgroud)