stream.groupingBy多层分组_微信分组名称

stream.groupingBy多层分组_微信分组名称Stream之Collectors.groupingBy(分组)的使用参考自:https://blog.csdn.net/u014231523/article/details/102535902Collectors.groupingBy配合Stream流使用,可以对集合中一个或多个属性进行分组,分组后还可以做聚合运算。首先把数据放入集合: Productprod1=newProduct(1L,1,newBigDecimal(“15.5″),”面包”,”零食”);Produ

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Stream之Collectors.groupingBy(分组)的使用

参考自:https://blog.csdn.net/u014231523/article/details/102535902

Collectors.groupingBy配合Stream流使用,可以对集合中一个或多个属性进行分组,分组后还可以做聚合运算。

首先把数据放入集合:

	Product prod1 = new Product(1L, 1, new BigDecimal("15.5"), "面包", "零食");
    Product prod2 = new Product(2L, 2, new BigDecimal("20"), "饼干", "零食");
    Product prod3 = new Product(3L, 3, new BigDecimal("30"), "月饼", "零食");
    Product prod4 = new Product(4L, 3, new BigDecimal("10"), "青岛啤酒", "啤酒");
    Product prod5 = new Product(5L, 10, new BigDecimal("15"), "百威啤酒", "啤酒");
    Product prod6 = new Product(5L, 7, new BigDecimal("25"), "百威啤酒", "啤酒");

    List<Product> prodList = List.of(prod1, prod2, prod3, prod4, prod5, prod6);

按照类别分组

Map<String, List<Product>> map1 = prodList.stream().collect(Collectors.groupingBy(Product::getCategory));
Set<Map.Entry<String, List<Product>>> entries1 = map1.entrySet();
for (Map.Entry<String, List<Product>> entry : entries1) { 
   
    System.out.println(entry);
}

输出结果:

啤酒=[Product{ 
   id=4, num=3, price=10, name='青岛啤酒', category='啤酒'}, Product{ 
   id=5, num=10, price=15, name='百威啤酒', category='啤酒'}, Product{ 
   id=5, num=7, price=25, name='百威啤酒', category='啤酒'}]
    
零食=[Product{ 
   id=1, num=1, price=15.5, name='面包', category='零食'}, Product{ 
   id=2, num=2, price=20, name='饼干', category='零食'}, Product{ 
   id=3, num=3, price=30, name='月饼', category='零食'}]

按照多个属性拼接分组

Map<String, List<Product>> map2 = prodList.stream()
        .collect(Collectors.groupingBy(item -> item.getCategory() + "_" + item.getName()));
Set<Map.Entry<String, List<Product>>> entries2 = map2.entrySet();
for (Map.Entry<String, List<Product>> entry : entries2) { 
   
    System.out.println(entry);
}

输出结果(可以看到百威啤酒那组有两个对象):

零食_月饼=[Product{ 
   id=3, num=3, price=30, name='月饼', category='零食'}]
    
零食_面包=[Product{ 
   id=1, num=1, price=15.5, name='面包', category='零食'}]
    
啤酒_百威啤酒=[Product{ 
   id=5, num=10, price=15, name='百威啤酒', category='啤酒'}, Product{ 
   id=5, num=7, price=25, name='百威啤酒', category='啤酒'}]
    
啤酒_青岛啤酒=[Product{ 
   id=4, num=3, price=10, name='青岛啤酒', category='啤酒'}]
    
零食_饼干=[Product{ 
   id=2, num=2, price=20, name='饼干', category='零食'}]

根据不同条件分组

这里按照num数值的大小来分

Map<String, List<Product>> map3 = prodList.stream().collect(Collectors.groupingBy(item -> { 
   
    if (item.getNum() > 3) { 
   
        return "num大于3";
    } else if (item.getNum() < 3) { 
   
        return "num小于3";
    } else { 
   
        return "num等于3";
    }
}));
Set<Map.Entry<String, List<Product>>> entries3 = map3.entrySet();
for (Map.Entry<String, List<Product>> entry : entries3) { 
   
    System.out.println(entry);
}

输出结果:

num小于3=[Product{ 
   id=1, num=1, price=15.5, name='面包', category='零食'}, Product{ 
   id=2, num=2, price=20, name='饼干', category='零食'}]
    
num等于3=[Product{ 
   id=3, num=3, price=30, name='月饼', category='零食'}, Product{ 
   id=4, num=3, price=10, name='青岛啤酒', category='啤酒'}]
    
num大于3=[Product{ 
   id=5, num=10, price=15, name='百威啤酒', category='啤酒'}, Product{ 
   id=5, num=7, price=25, name='百威啤酒', category='啤酒'}]

多级分组

这里先按照类别分组,再按照num分组

Map<String, Map<String, List<Product>>> map4 = prodList.stream()
        .collect(Collectors.groupingBy(Product::getCategory, Collectors.groupingBy(item -> { 
   
            if (item.getNum() >= 8) { 
   
                return "num大于等于8";
            } else { 
   
                return "num小于8";
            }
        })));
Set<Map.Entry<String, Map<String, List<Product>>>> entries4 = map4.entrySet();
for (Map.Entry<String, Map<String, List<Product>>> entry : entries4) { 
   
    System.out.println(entry);
}

输出结果:

啤酒={ 
   num小于8=[Product{ 
   id=4, num=3, price=10, name='青岛啤酒', category='啤酒'}, Product{ 
   id=5, num=7, price=25, name='百威啤酒', category='啤酒'}], num大于等于8=[Product{ 
   id=5, num=10, price=15, name='百威啤酒', category='啤酒'}]}

零食={ 
   num小于8=[Product{ 
   id=1, num=1, price=15.5, name='面包', category='零食'}, Product{ 
   id=2, num=2, price=20, name='饼干', category='零食'}, Product{ 
   id=3, num=3, price=30, name='月饼', category='零食'}]}

分组后再聚合求总数

这里先按照类别分组,再聚合求总数

Map<String, Long> map5 = prodList.stream()
        .collect(Collectors.groupingBy(Product::getCategory, Collectors.counting()));
Set<String> strings5 = map5.keySet();
for (String s : strings5) { 
   
    System.out.println(s + "---" + "总数:" + map5.get(s));
}

输出结果:

啤酒---总数:3
零食---总数:3

分组后再做相加运算

这里先按照类别分组,再聚合运算(把num相加)

Map<String, Integer> map6 = prodList.stream()
        .collect(Collectors.groupingBy(Product::getCategory, Collectors.summingInt(Product::getNum)));
Set<String> strings6 = map6.keySet();
for (String s : strings6) { 
   
    System.out.println(s + "---" + "num相加后:" + map6.get(s));
}

输出结果:

啤酒---num相加后:20
零食---num相加后:6
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171494.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Spring Boot定制首页和404页面

    Spring Boot定制首页和404页面一、定制首页:方式一:SpringBoot自动映射在静态资源目录resources、static、public的其中一个目录中创建index.html文件,springBoot会自动识别,将这个文件作为首页访问 方式二:使用thymeleaf模板引擎1.导入依赖<!–Thymeleaf模板引擎依赖–><dependency><groupId>org.thymeleaf</groupId><artifact

    2022年7月27日
    14
  • 新东方网课资源分享_新东方笔记大赛官网

    新东方网课资源分享_新东方笔记大赛官网
    新东方李老师的734条高频词组笔记(实在是太有用了!就转来了,没看过的,赶紧点吧~)

    1.abideby(=befaithfulto;obey)忠于;遵守。
    2.beabsentfrom….缺席,不在
    3.absenceofmind(=beingabsent-minded)心不在焉
    4.absorb(=takeuptheattentionof)吸引…的注意力(被动语态)beabsorbedin

    2025年11月5日
    3
  • Linux下配置bond0

    Linux下配置bond01.使用network接管网络服务,停止使用NetworkManager,如若没有network服务,安装network-scripts安装包即可2.做之前备份网卡配置文件。配置模板前景要求:6个网口,两两配置bond0,连接名分别为servicebond、cloudbond、storagebond,三个平面的VLanID分别为19,320,414一、配置连接名#vim/etc/sysconfig/network-scripts/ifcfg-servicebond

    2022年4月6日
    177
  • visual studio community 2019激活_visual studio 2019社区版安装教程

    visual studio community 2019激活_visual studio 2019社区版安装教程VS2019社区版是免费的,但是需要登录微软账户,不登录只能使用30天,30天之后就无法使用了,如下图:首先使用能够访问外网的电脑登录微软账户注册VS。也可以使用我这个Licensing,直接进入第三步 找到注册文件,路径:C:\Users\{系统登录用户}\AppData\Local\Microsoft\VSCommon 将两个文件夹复制到需要注册的电脑上,路径:C:\…

    2022年8月22日
    23
  • 第三章《数据表的基本操作》

    第三章《数据表的基本操作》

    2021年5月28日
    121
  • CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)

    CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)上一篇文章(http://blog.csdn.net/u012116457/article/details/52161201)提到,为了更好的满足我们的要求,还需要对服务端进行改造。最近发现了一个巨牛的人工智能教程,不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!所以分享给大家,感兴趣的童鞋可以看看。点这里可以跳转到教程。1.新建cas_server为了方便,首先我们现在…

    2022年6月5日
    95

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号