Java8Stream流2

上期对stream流大致总结了一下,后面又做了一些练习,大家可以参考一下。

  • 首先需要建一个 Product的实体类,后面会用到
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {
    private Long id;
    private Integer num;
    private BigDecimal price;
    private String name;
    private String category;

}
  • 下面是一些具体的案例
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"), "百威啤酒", "啤酒");
    List<product> proList = Lists.newArrayList(prod1,prod2,prod3,prod4,prod5);
    @Test
    public void testG(){
        Map<string, list<product>> proMap = proList.stream().collect(Collectors.groupingBy(Product::getCategory));
        for(Map.Entry<string,list<product>> entry : proMap.entrySet()){
            System.out.println("key" + entry.getKey() + " value" + entry.getValue());
        }
    }

    @Test
    public void testCollect1(){
        //&#x6C42;&#x603B;&#x6570;
        Long sum = proList.stream().collect(Collectors.counting());
        //&#x6C42;&#x5E73;&#x5747;&#x6570;&#x91CF;
        Double averageNum = proList.stream().collect(Collectors.averagingInt(Product::getNum));
        //&#x6C42;&#x6700;&#x9AD8;&#x4EF7;&#x683C;
        Optional<bigdecimal> max = proList.stream()
                .map(Product::getPrice)
                .collect(Collectors.maxBy(BigDecimal::compareTo));
        //&#x6C42;&#x6570;&#x91CF;&#x4E4B;&#x548C;
        Long collect = proList.stream().collect(Collectors.summingLong(Product::getNum));
        //&#x4E00;&#x6B21;&#x6027;&#x7EDF;&#x8BA1;&#x6240;&#x6709;&#x4FE1;&#x606F;
        LongSummaryStatistics proLSS = proList.stream().collect(Collectors.summarizingLong(Product::getNum));

        log.info("&#x6C42;&#x603B;&#x6570;:{}", sum);
        log.info("&#x6C42;&#x603B;&#x6C42;&#x5E73;&#x5747;&#x6570;&#x91CF;&#x6570;:{}" ,averageNum);
        log.info("&#x6C42;&#x6700;&#x9AD8;&#x4EF7;&#x683C;:{}" ,max.get());
        log.info("&#x6C42;&#x6570;&#x91CF;&#x4E4B;&#x548C;:{}" ,collect);
        //System.out.println("&#x6C42;&#x603B;&#x6570;" + sum);
        //System.out.println("&#x6C42;&#x5E73;&#x5747;&#x6570;&#x91CF;" + averageNum);
//        System.out.println("&#x6C42;&#x6700;&#x9AD8;&#x4EF7;&#x683C;" + max);
//        System.out.println("&#x6C42;&#x6570;&#x91CF;&#x4E4B;&#x548C;" + collect);
        System.out.println("&#x4E00;&#x6B21;&#x6027;&#x7EDF;&#x8BA1;&#x6240;&#x6709;&#x4FE1;&#x606F;" + proLSS);

        //&#x5C06;&#x4EA7;&#x54C1;&#x6309;&#x6570;&#x91CF;&#x662F;&#x5426;&#x5927;&#x4E8E;5&#x5206;&#x533A;
        Map<boolean, list<product>> partList = proList.stream().collect(Collectors.partitioningBy(n -> n.getNum() > 5));
        log.info("&#x6309;&#x6570;&#x91CF;&#x662F;&#x5426;&#x5927;&#x4E8E;5&#x5206;&#x533A;:{}",partList);
        //&#x5C06;&#x4EA7;&#x54C1;&#x6309;&#x7C7B;&#x522B;&#x5206;&#x7EC4;
        Map<string, list<product>> groupList = proList.stream().collect(Collectors.groupingBy(p -> p.getCategory()));
        Map<string, list<product>> groupList1 = proList.stream().collect(Collectors.groupingBy(Product::getCategory));
        log.info("&#x5C06;&#x4EA7;&#x54C1;&#x6309;&#x7C7B;&#x522B;&#x5206;&#x7EC4;:{}",groupList);
        log.info("&#x5C06;&#x4EA7;&#x54C1;&#x6309;&#x7C7B;&#x522B;&#x5206;&#x7EC4;:{}",groupList1);

    }

    @Test
    public void testJoiningReducing(){
        //&#x5C06;&#x6240;&#x6709;&#x4EA7;&#x54C1;&#x7684; &#x540D;&#x79F0; &#x62FC;&#x63A5;&#x6210;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;
        String names = proList.stream().map(Product::getName).collect(Collectors.joining("_"));
        log.info("&#x6240;&#x6709;&#x4EA7;&#x54C1;&#x540D;:{}",names);

        List<string> strList = Arrays.asList("A", "B", "C", "D");
        String strJoining = strList.stream().collect(Collectors.joining("+_+"));
        log.info("&#x5B57;&#x7B26;&#x4E32;:{}",strJoining);

        Integer collect = proList.stream().collect(Collectors.reducing(0, Product::getNum, (x, y) -> (x + y + 1)));
        log.info("collect:{}",collect);

        //stream&#x4E2D;&#x7684;reduce
        Optional<integer> reduce = proList.stream().map(Product::getNum).reduce(Integer::compare);
        log.info("stream->reduce:{}",reduce.get());
    }

    @Test
    public void testSorted1(){
        //&#x6309; &#x6570;&#x91CF;&#x5347;&#x5E8F;&#x6392;&#x5217;
        List<product> sortedList = proList.stream().sorted(Comparator.comparing(Product::getNum))
                .collect(Collectors.toList());
        log.info("sorted:{}",sortedList);

        //&#x6309;&#x6570;&#x91CF;&#x5012;&#x53D9;&#x6392;
        List<product> sortedListReversed = proList.stream().sorted(Comparator.comparing(Product::getNum).reversed())
                .collect(Collectors.toList());
        log.info("sored.reversed:{}",sortedListReversed);

        //&#x5148;&#x6309;&#x6570;&#x91CF;&#x6392;&#xFF0C;&#x518D;&#x6309;&#x4EF7;&#x683C;&#x6392; (&#x9ED8;&#x8BA4;&#x5347;&#x5E8F;&#xFF09;
        List<product> collect = proList.stream().sorted(Comparator.comparing(Product::getNum).thenComparing(Product::getPrice))
                .collect(Collectors.toList());
        log.info("&#x5148;&#x6309;&#x6570;&#x91CF;&#x6392;&#xFF0C;&#x518D;&#x6309;&#x4EF7;&#x683C;&#x6392; :{}",collect);

        //&#x5148;&#x6309;&#x6570;&#x91CF;&#x6392;&#xFF0C;&#x518D;&#x6309;&#x4EF7;&#x683C;&#x6392; (&#x964D;&#x5E8F;&#x6392;&#xFF09;
        List<product> collect1 = proList.stream()
                .sorted(Comparator.comparing(Product::getNum).thenComparing(Product::getPrice).reversed())
                .collect(Collectors.toList());
        log.info("&#x5148;&#x6309;&#x6570;&#x91CF;&#x6392;&#xFF0C;&#x518D;&#x6309;&#x4EF7;&#x683C;&#x964D;&#x5E8F;&#x6392; :{}",collect1);

        //&#x5148;&#x6309;&#x6570;&#x91CF;&#x6392; &#x518D;&#x6309;&#x4EF7;&#x683C; &#x81EA;&#x5B9A;&#x4E49;&#x6392;
        List<product> collect2 = proList.stream().sorted((p1, p2) -> {
            if (p1.getNum() == p2.getNum()){
                return p1.getPrice().compareTo(p2.getPrice()) ;
            }else {
                return p2.getNum() - p1.getNum();
            }
        }).collect(Collectors.toList());
        log.info("&#x5148;&#x6309;&#x6570;&#x91CF;&#x6392; &#x518D;&#x6309;&#x4EF7;&#x683C; &#x81EA;&#x5B9A;&#x4E49;&#x6392;:{}",collect2);
    }

    //&#x6D4B;&#x8BD5;stream&#x4E2D;reduce (&#x89C4;&#x7EA6; &#x4E5F;&#x6210;&#x4E3A;&#x7F29;&#x51CF; &#x662F;&#x628A;&#x4E00;&#x4E2A;&#x6D41;&#x7F29;&#x51CF;&#x6210;&#x4E00;&#x4E2A;&#x503C; &#x80FD;&#x5B9E;&#x73B0;&#x5BF9;&#x96C6;&#x5408;&#x6C42;&#x548C;&#xFF0C;&#x6C42;&#x79EF; &#x548C;&#x6C42;&#x6700;&#x503C;&#x7684;&#x64CD;&#x4F5C;)
    @Test
    public void testStreamReduce() {
        //&#x6C42;&#x5546;&#x54C1; &#x4EF7;&#x683C;&#x7684;&#x603B;&#x548C; &#x65B9;&#x5F0F;1
        Optional<bigdecimal> sum = proList.stream().map(Product::getPrice)
                .reduce((x, y) -> x.add(y));
        log.info("&#x6C42;&#x548C;:{}",sum.get());

        //&#x6C42;&#x5546;&#x54C1; &#x6570;&#x91CF;&#x7684;&#x603B;&#x548C; &#x65B9;&#x5F0F;2
        Optional<integer> sum1 = proList.stream().map(Product::getNum)
                .reduce(Integer::sum);
        log.info("&#x6C42;&#x548C;:{}",sum1.get());

        //&#x6C42;&#x5546;&#x54C1; &#x4EF7;&#x683C;&#x7684;&#x603B;&#x548C; &#x65B9;&#x5F0F;2
        Optional<bigdecimal> sum2 = proList.stream().map(Product::getPrice)
                .reduce(BigDecimal::add);
        log.info("&#x6C42;&#x548C;sum2:{}",sum2.get());

        //&#x6C42;&#x5546;&#x54C1; &#x4EF7;&#x683C;&#x7684;&#x603B;&#x548C; &#x65B9;&#x5F0F;3
        BigDecimal sum3 = proList.stream().map(Product::getPrice)
                .reduce(new BigDecimal("0"),BigDecimal::add);
        log.info("&#x6C42;&#x548C;sum3:{}",sum3);

        //&#x6C42;&#x4E58;&#x79EF;
        Optional<integer> product = proList.stream().map(Product::getNum).reduce((x, y) -> x * y);
        log.info("&#x4E58;&#x79EF;:{}",product);

        //&#x6C42;&#x6700;&#x5927;&#x503C; &#x65B9;&#x5F0F; 1
        Optional<bigdecimal> maxPrice = proList.stream().map(Product::getPrice)
                .reduce((x, y) -> x.compareTo(y) == 1 ? x : y);
        log.info("&#x5546;&#x54C1;&#x4EF7;&#x683C;&#x7684;&#x6700;&#x5927;&#x503C;:{}",maxPrice);

        //&#x6C42;&#x6700;&#x5927;&#x503C; &#x65B9;&#x5F0F;2
        BigDecimal max2 = proList.stream().map(Product::getPrice)
                .reduce(new BigDecimal(1), BigDecimal::max);
        log.info("&#x6C42; &#x6700;&#x5927;&#x503C; &#x65B9;&#x5F0F;2:{}",max2);
    }
</bigdecimal></integer></bigdecimal></integer></bigdecimal></product></product></product></product></product></integer></string></string,></string,></boolean,></bigdecimal></string,list<product></string,></product>

Original: https://www.cnblogs.com/huoyl/p/Java8Stream2.html
Author: h*z
Title: Java8Stream流2

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598584/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 基于Redis&MySQL接口幂等性设计

    基于Redis&MySQL接口幂等性设计 欲把相思说似谁,浅情人不知。 幂等性即多次调用接口或方法不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。 前端重复提…

    数据库 2023年6月14日
    090
  • 算法-贪心思想

    算法-贪心思想 庭前看玉树,肠断忆连枝 一、剪绳子 1、题目描述 把一根绳子剪成多段,并且使得每段的长度乘积最大。 2、解题思路 尽可能得多剪长度为 3 的绳子,并且不允许有长度为…

    数据库 2023年6月14日
    0150
  • cobbler部署

    cobbler cobbler 一、cobbler简介 二、cobbler对应关系 三、cobbler工作原理 cobbler部署 进行测试 web界面自动安装 一、cobbler…

    数据库 2023年6月14日
    089
  • MongoDB中如何优雅地删除大量数据

    删除大量数据,无论是在哪种数据库中,都是一个普遍性的需求。除了正常的业务需求,我们需要通过这种方式来为数据库”瘦身”。 为什么要”瘦身&#822…

    数据库 2023年6月11日
    094
  • 记一次vcenter连接esxi失败问题排查(443端口不通)

    vecenter错误 esxi宿主机重启后,vcenter连接esxi提示超时,使用vmware客户端连接esxi也提示超时,开始介入排查。 故障排查 如何进入命令终端 运行alt…

    数据库 2023年6月9日
    0117
  • lvs负载均衡

    Lvs 一.Lvs简介 二. 体系结构 三. Lvs管理工具 1. ipvs 2. ipvsadm 四.lvs工作模式及原理 1.NAT模式 2. DR模式 3.TUN模式(隧道模…

    数据库 2023年6月14日
    098
  • 重新学习数据库(3)

    单元概述 通过本章的学习能够理解MySQL数据库中分组查询的含义,掌握常用分组函数的使用,掌握GROUP BY子句的使用规则,掌握分组后数据结果的条件过滤,掌握SELECT语句执行…

    数据库 2023年6月16日
    0207
  • 计算机图形学

    计算机图形学 光追一般指光线追踪。 光线跟踪(也叫ray tracing或者光束投射法)。是一个在二维(2D)屏幕上呈现三维(3D)图像的方法。 BRDF是双向反射分布函数(Bid…

    数据库 2023年6月14日
    081
  • 多商户商城系统功能拆解21讲-平台端分销订单

    多商户商城系统,也称为B2B2C(BBC)平台电商模式多商家商城系统。可以快速帮助企业搭建类似拼多多/京东/天猫/淘宝的综合商城。 多商户商城系统支持商家入驻加盟,同时满足平台自营…

    数据库 2023年6月14日
    0111
  • 重返MySQL之MySQL基础

    重返MySQL之MySQL基础 本章详细介绍了,什么是数据库,常见的关系型数据库有哪些,什么是MySQL,及MySQL中DDL操作表,DML操作表记录。 1.0 数据库概述 1.1…

    数据库 2023年6月9日
    0141
  • Java 8的新特性还不了解?快进来!

    能坚持别人不能坚持的,才能拥有你想拥有的。关注 &#x7F16;&#x7A0B;&#x5927;&#x9053;,让我们一起成长 哈喽,大家好,我是…

    数据库 2023年6月11日
    085
  • Maven进行clean时报错,解决方法

    Q1:由于网络原因,maven仓库中产生了后缀LastUpdated文件,再次clean直接报错 参考方法:https://www.cnblogs.com/DDgougou/p/1…

    数据库 2023年6月9日
    0119
  • 23种设计模式之解释器模式(Interpreter)

    文章目录 概述 解释器模式的优缺点 解释器模式的结构和实现 * 模式结构 模式实现 JDK源码中的使用场景 总结 概述 解释器模式(Interpreter Pattern)提供了评…

    数据库 2023年6月6日
    0118
  • 磁盘空间满,如何处理?

    作为运维人员,磁盘空间报警是最寻常遇到的情况,那么遇到空间如何处理呢?这里介绍一下处理办法及处理思路。 操作系统:centos系统 、Ubuntu 1 定位目录 收到空间报警信息,…

    数据库 2023年6月14日
    087
  • Linux 磁盘挂载

    具体操作是: 1.先对磁盘进行格式化; 挂载磁盘到需要的挂载点; 3.添加分区启动表 1、首先查看系统中磁盘信息 命令为:fdisk -l 2、格式化要挂载的磁盘 格式化命令为:m…

    数据库 2023年6月14日
    0153
  • [javaweb]监听器统计网页在线人数

    监听器 1.配置监听器 package com.javaweb.controller; import javax.servlet.ServletContext; import ja…

    数据库 2023年6月16日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球