当前位置: 首页 > 知识库问答 >
问题:

使用java8[重复]从数组列表中计算特定对象的发生次数

谭裕
2023-03-14

比方说,我有一个数组列表:

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

从这个列表中,我想找到如下发生次数。

catalog id--->901    -- 2
catalog id--->545    -- 3
catalog id--->546    -- 2
catalog id--->40962  -- 4

我的目标是,根据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);
}

更新

尝试实施以下案例:

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.
        }

    }

共有1个答案

冯良才
2023-03-14

您可以使用Streams做到这一点:

catalogs.stream().collect(
                Collectors.groupingBy(Catalog::getId, Collectors.counting()));

输出:

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

--编辑--

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

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

输出:

catalog id--->901    -- 2
catalog id--->545    -- 3
catalog id--->546    -- 2
catalog id--->40962  -- 4
 类似资料:
  • 问题内容: 我有以下JSON数组,我想创建对象表单状态键计数 要计算状态键值并创建以下对象 问题答案: 使用 方法 虽然可以使用 具有相同代码的方法。

  • 我有一个数组。如何按类型、名称和大小以及递增量找到双重许可。增加数量后删除相同的。

  • 假设有一个类Obj 并且您有一个实例列表,即。 现在,我如何在Java8中用流找到来自列表中对象的int字段值的和(例如,对于对象,标准是)?

  • 我已经将代码中的read整数修复为不再是I而是一个单独的变量“index”,并理解为什么我会收到Over Ofbound异常,但我有点厚,不明白如何在添加哨兵值0的同时修复它。

  • 我有一个数据帧: 谢谢!

  • 我试图解决一个问题,但没有成功。 我有两张号码单 我有一张桌子 现在我需要计算多少次从第二个列表的数字后从第一个列表的数字,但我应该只计算一个一个id 在上面的示例表中,结果应该是2 三个匹配的pars,但是因为我们只有两个不同的ID,结果是2而不是3 PAR: 笔记我使用MSSQL 编辑。还有一列确定顺序的日期 Edit2-解决方案 我写这个查询 在这之后,我计划按id分组,每个id只使用一个匹