代码之家  ›  专栏  ›  技术社区  ›  Karthikeyan

使用java8[duplicate]统计数组列表中特定对象的出现次数

  •  2
  • Karthikeyan  · 技术社区  · 6 年前

    这个问题已经有了答案:

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

    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 回复  |  直到 6 年前
        1
  •  7
  •   Aman Chhabra    6 年前

    你可以用溪流:

    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