循环遍历具有相同属性的项目(catalog_id)

我有一个Catalog具有以下属性的bean:


catalog_id

catalog_name

catalog_price

catalog_title

catalog_id不是唯一的,可以有多个Catalog具有相同id.


有一个Catalog对象列表,我想收集所有相同的对象,id并且在第二个 for 循环中我想遍历 that 的出现次数id。


让我们说:


catalogList2.stream()

        .collect(Collectors.groupingBy(Catalog::getId, Collectors.counting()))

        .entrySet()

        .stream()

        .map(p->"catalog id--->"+p.getKey()+"    -"+p.getValue()).forEach(System.out::println);

从上面的代码我能够得到以下输出:


catalog id--->17553    -- 8

catalog id--->545    -- 8

catalog id--->546    -- 6

catalog id--->40962    -- 16

catalog id--->901    -- 12

但是,在那之后我想做如下:(它只是我想要实现的结构)


for(Catalog cat1:p.getKey()){


    for(int i=0;i<p.getValue();i++){


        System.out.println("Name -->"+cat1.get(i)));

        //Something i will do here.


    }


}

我不确定如何实现这种结构。


慕尼黑的夜晚无繁华
浏览 195回答 2
2回答

哆啦的时光机

在groupingBy没有下游收集器的情况下使用会将 ID 映射到具有这些 ID 的目录列表。然后,您可以询问列表的大小以获取计数并遍历列表以获取每个目录:catalogList2.stream()&nbsp; &nbsp; .collect(Collectors.groupingBy(Catalog::getId))&nbsp; &nbsp; .forEach((id, catalogs) -> {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Catalog id : " + id + " : " + catalogs.size());&nbsp; &nbsp; &nbsp; &nbsp; catalogs.forEach(System.out::println);&nbsp; &nbsp; });

一只名叫tom的猫

你可以这样做:catalogList.stream().collect(Collectors.groupingBy(Catalog::getId)).forEach((key,value)->{&nbsp; &nbsp; for(Catalog curValue:value)&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Name -->"+curValue.catalog_name);&nbsp; &nbsp; });输出:Name -->Catalog 2Name -->Catalog 3Name -->Catalog 4Name -->Catalog 1Name -->Catalog 7Name -->Catalog 8Name -->Catalog 9Name -->Catalog 15Name -->Catalog 16Name -->Catalog 18Name -->Catalog 19Name -->Catalog 20
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java