java8 常用操作案例【经典版】超赞!

news2024/9/22 23:50:17

目录

一 案例

1.1  对象转list

1.2  过滤对象

1.3  排序

1.4 匹配

1.5 最大值最小值

1.6 拼接字符串

1.7  求和

1.8  分组

1.9 分组求和

1.10 综合案例


一 案例

1.1  对象转list

    /**
    * @author admin
      对象转map ;  mapper层实体类获取,到业务层转换为DTO,
    * @return void
    */
    public static void duixiangToMap(){
        List<User> list = Arrays.asList(
                new User(1L, "张三", 18),
                new User(2L, "李四", 20),
                new User(3L, "王五", 33),
                new User(4L, "赵六", 44));
        List<UserDTO> userDTOList = list.stream().map(obj -> {
            UserDTO userDTO = new UserDTO(obj.getId(), obj.getName(), obj.getAge());
            return userDTO;
        }).collect(Collectors.toList());
        userDTOList.forEach(System.out::println);
    }

结果:

1.2  过滤对象

    /**
    * @author admin
    * @description       
      案例2:  过滤长度大于7
    * @return void
    */
    public static void duiFilter(){
        List<String> list = Arrays.asList(  "SpringBoot",   "SpringCloud", "Spring", "SpringMVC","mybatis","html",  "git"  );        
        List<String> stringList = list.stream().filter(obj -> obj.length() > 7).collect(Collectors.toList());     
        System.out.println(stringList);
    }

1.3  排序

    public static void testSorted(){
        List<String> list = Arrays.asList(
                "SpringBoot",                "SpringCloud",                "Spring",
                "SpringMVC",                "mybatis",                "html",                "git"
        );
        List<String> collect = list.stream().sorted().collect(Collectors.toList());
        System.out.println(collect);
        //根据长度进行排序
        List<String> collect1 = list.stream().sorted(Comparator.comparing(String::length)).collect(Collectors.toList());
        System.out.println(collect1);
        //limit截取
        List<String> collect2 = list.stream().sorted(Comparator.comparing(String::length)).limit(3).collect(Collectors.toList());
        System.out.println(collect2);
        //limit截取
        List<String> collect3 = list.stream().sorted(Comparator.comparing(String::length).reversed()).limit(3).collect(Collectors.toList());
        System.out.println(collect3);
          }

1.4 匹配

          /**
          * @author admin
          * @description       
           match 匹配
          allMatch检查是否匹配所有元素,符合才返回trueanyMatch检查是否至少匹配一个元素
          */
          public static void testAllOrAnyMatch(){
              List<String> list = Arrays.asList(
                      "SpringBoot",
                      "SpringCloud",
                      "Spring",
                      "SpringMVC",
                      "mybatis",
                      "html",
                      "git"
                    );

              boolean allMatch = list.stream().allMatch(obj -> obj.length() > 5);
              System.out.println(allMatch);
              boolean anyMatch = list.stream().anyMatch(obj -> obj.length() > 10);
              System.out.println(anyMatch);
          }

1.5 最大值最小值

    /**
    * @author admin
     求最大值和最小值
    * @return void
    */
    public static void testMaxMin(){
        List<User> list = Arrays.asList(
                new User(1L, "张三", 18),
                new User(2L, "李四", 20),
                new User(3L, "王五", 33),
                new User(4L, "赵六", 44));
        Optional<User> userOptional = list.stream().max(Comparator.comparingInt(User::getAge));
        System.out.println(userOptional.get().getAge());
        Optional<User> userOptional1 = list.stream().min(Comparator.comparingInt(User::getAge));
        System.out.println(userOptional1.get().getAge());
    }

1.6 拼接字符串

/**
拼接字符串
*/
public static void joinStr() {
    String collect = Stream.of("spt", "smvc","111").collect(Collectors.joining("@" ));
    System.out.println("r:"+collect);
}

结果:

1.7  求和

/**
* @author admin
   求和      
* @return void
*/
public static void qiuHe(){
    Integer value = Stream.of(1, 2, 3, 4, 5, 6).reduce((item1,item2) -> item1 + item2).get();
    System.out.println(value);
//不适用lambda表达式
Integer value1 = Stream.of(1, 2, 3, 4, 5, 6).reduce(new BinaryOperator<Integer>() {
    @Override
    public Integer apply(Integer integer, Integer integer2) {
        return integer + integer2;    }}
     ).get();
System.out.println("value1:"+value1);
//10作为初始值,然后和第一个数相加,结果再与第二个数相加,直到所有的数相加完成为止
  Integer value3 = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9).reduce(10, (sum, item) -> sum + item);
  System.out.println("value3:"+value3);
}

1.8  分组

public static void   qiuByGroup() {
    List<String> list = Arrays.asList("SpringBoot", "SpringCloud",
            "Spring", "SpringMVC", "mybatis", "html",
            "git");
    Map<Boolean, List<String>> listMap = list.stream().collect(partitioningBy(obj -> obj.length() > 8));
    listMap.forEach((key, value) -> {
        System.out.println(key);
        value.forEach(System.out::println);
        System.out.println();
    });
}

1.9 分组求和

public static void  qiuByGroupSUm(){
    //根据学生的省份进行分组
    List<Student> students = Arrays.asList(new Student("⼴东", 23),        new Student("⼴东", 24),        new Student("⼴东", 23),
            new Student("北京", 22),        new Student("北京", 20),        new Student("北京", 20),        new Student("海南", 25));
    Map<String, List<Student>> collect = students.stream().collect(Collectors.groupingBy(obj -> obj.getName()));
    collect.forEach((key,value)->{    System.out.println(key);    value.forEach(System.out::println);});
    //统计学生的各个年龄信息
    IntSummaryStatistics summaryStatistics = students.stream().collect(Collectors.summarizingInt(Student::getAge));
    System.out.println("平均值:"+summaryStatistics.getAverage());
    System.out.println("人数:"+summaryStatistics.getCount());
    System.out.println("最大值:"+summaryStatistics.getMax());
    System.out.println("最小值:"+summaryStatistics.getMin());
    System.out.println("总和:"+summaryStatistics.getSum());
}

1.10 综合案例

Java 8 Stream API:强大而灵活的数据处理流水线

public static void testTen(){
//总价 35
         List<VideoOrder> videoOrders1 = Arrays.asList(
        new VideoOrder("20190242812", "springboot教程", 3),
            new VideoOrder("20194350812", "微服务SpringCloud", 5),
            new VideoOrder("20190814232", "Redis教程", 9),
            new VideoOrder("20190523812", "⽹⻚开发教程", 9),
            new VideoOrder("201932324", "百万并发实战Netty", 9));
    //总价 54
    //
    List<VideoOrder> videoOrders2 = Arrays.asList(
            new VideoOrder("2019024285312", "springboot教程", 3),
            new VideoOrder("2019081453232", "Redis教程", 9),
            new VideoOrder("20190522338312", "⽹⻚开发教程", 9),
            new VideoOrder("2019435230812", "Jmeter压⼒测试", 5),
            new VideoOrder("2019323542411", "Git+Jenkins持续集成", 7),
            new VideoOrder("2019323542424", "Idea全套教程", 21));
    //交集
    List<VideoOrder> intersectionList = videoOrders1.stream().filter(videoOrders2::contains).collect(Collectors.toList());
    System.out.println("交集=:"+intersectionList);
    //差集1
    List<VideoOrder> diffList1 = videoOrders1.stream().filter(obj -> !videoOrders2.contains(obj)).collect(Collectors.toList());
    System.out.println("差集1="+diffList1);
    //并集
    List<VideoOrder> allVideoOrder = videoOrders1.parallelStream().collect(Collectors.toList());      allVideoOrder.addAll(videoOrders2);
    System.out.println("并集="+allVideoOrder);
    //去重并集
    List<VideoOrder> allVideoOrderDistinct = allVideoOrder.stream().distinct().collect(Collectors.toList());
    System.out.println("去重并集="+allVideoOrderDistinct);
    //两个订单平均价格
    double videoOrderAvg1 = videoOrders1.stream().collect(Collectors.averagingInt(VideoOrder::getMoney));
    System.out.println("订单1平均价格="+videoOrderAvg1);
    double videoOrderAvg2 = videoOrders2.stream().collect(Collectors.averagingInt(VideoOrder::getMoney));
    System.out.println("订单2平均价格="+videoOrderAvg2);
    //两个订单总价格
    long sum1 = videoOrders1.stream().collect(Collectors.summarizingInt(VideoOrder::getMoney)).getSum();
    System.out.println("订单1总价格="+sum1);
    long sum2 = videoOrders2.stream().collect(Collectors.summarizingInt(VideoOrder::getMoney)).getSum();
    System.out.println("订单2总价格="+sum2);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2156148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当你在Linux系统中使用MySQL命令行工具查询数据库时,如果中文显示为问号(?)或其他乱码,简单解决办法。(2)

文章目录 1、问题出现2、解决办法 1、问题出现 2、解决办法 mysql -u [username] -p --default-character-setutf8 [database_name]rootab66508d9441:/# mysql -uroot -p123456 --default-character-setutf8 tingshu_album mysql: [Warning] Using a password on the command …

【时时三省】(C语言基础)指针笔试题3

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 笔试题3 首先创建了一个数组 数组里面放了1 2 3 4 &a取出的是数组的地址 数组地址加1 如下图 直接从1跳到了四后面 然后强制类型转换成了int* 转换成int*之…

分布式锁优化之 使用lua脚本改造分布式锁保证判断和删除的原子性(优化之LUA脚本保证删除的原子性)

文章目录 1、lua脚本入门1.1、变量&#xff1a;弱类型1.2、流程控制1.3、在lua中执行redis指令1.4、实战&#xff1a;先判断是否自己的锁&#xff0c;如果是才能删除 2、AlbumInfoApiController --》testLock()3、AlbumInfoServiceImpl --》testLock() 1、lua脚本入门 Lua 教程…

STM32F407单片机编程入门(十四) 内部RTC实时时钟详解及实战含源码

文章目录 一.概要二.RTC基本介绍三.STM32单片机RTC内部结构图四.CubeMX配置一个RTC时间例程五.CubeMX工程源代码下载六.小结 一.概要 RTC&#xff08;Real-Time Clock&#xff09;是一种用于追踪和记录实际时间的时钟系统。在STM32中&#xff0c;RTC通常用于提供实时时钟和日期…

【python】修改字典的内容

person {"name": "John", "age": 30, "city": "New York"} print("最开始的信息&#xff1a;",person)def process_person_info(person):# 检查对象中是否包含所有必要的键if name in person and age in person …

MySQL缓冲池详解

Buffer Pool 本文参考开源项目&#xff1a;小林coding在线文档&#xff1b; 01-缓冲池概述 ​ 在MySQL查询数据的时候&#xff0c;是通过存储引擎去磁盘做IO来获取数据库中的数据&#xff0c;这样每次查询一条数据都要去做一次或者多次磁盘的IO&#xff0c;无疑是非常慢的。…

(C++23) expected 基础使用

文章目录 ⭐前言⭐expected&#x1f39b;️基础使用&#x1f39b;️单子操作 (Monadic operations)&#x1f39a;️and_then & or_else&#x1f39a;️transform & transform_error ⭐END&#x1f31f;跋&#x1f31f;交流方式 ⭐前言 在 C17 中&#xff0c;提出了 op…

量化交易backtrader实践(二)_基础加强篇(4)_交易设置与自定义绘图

这一节我们来深入实践交易的设置以及自定义绘图。 01_交易设置 参考文档&#xff1a; Backtrader系列教程④&#xff1a;交易篇&#xff08;上&#xff09;_backtrader撤单操作-CSDN博客量化投资之工具篇一&#xff1a;Backtrader从入门到精通&#xff08;8&#xff09;-交易…

记软件开发者画图(UML),使用WPS应用制图

目录 前言 一、什么是UML 二、使用什么画图工具 三、示例 ​四、IntelliJ IDEA 2021快速生成UML图 前言 做软件开发的从写第一个示例程序到最后写项目程序避不开的需要设计画图&#xff0c;所以今天我们就来梳理一下‌UML&#xff08;统一建模语言&#xff09;图形需要画…

《深度学习》卷积神经网络CNN 原理及其流程解析

目录 一、CNN图像原理 1、了解图像的原理 2、举例 二、CNN图像识别 1、画面不变性 2、主要表现 1&#xff09;平移不变性 2&#xff09;尺度不变性 3&#xff09;旋转不变性 3、传统神经网络识别 1&#xff09;数据预处理 2&#xff09;特征提取 3&#xff09;搭建神经网…

C++基础(8.继承_多态)

目录 继承&#xff1a; 继承的概念&#xff1a; 继承的定义&#xff1a; 基类和派生类对象赋值转换 &#xff1a; 继承中的作用域&#xff1a; 派生类的默认成员函数&#xff1a; 例题&#xff1a; ​编辑​编辑​编辑 继承与友元&#xff1a; 继承与静态成员&#xff1…

图片马赛克处理(Java)

1.需求 给图片的指定区域打码给整张图片打码马赛克方格取色支持中心点取色和随机取色马赛克支持灰度处理 2.源码 package com.visy.utils;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOE…

Rabbitmq消息队列,安装,使用,三种工作模式

产品 消息队列技术介绍 消息队列概述 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境&#xff0c;使用较多的消息队列有…

基于51单片机的汽车倒车防撞报警器系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 本课题基于微控制器控制器&#xff0c; 设计一款汽车倒车防撞报警器系统。 要求&#xff1a; 要求&#xff1a;1.配有距离&#xff0c; 用于把车和障碍物之间的距离信号送入控制器。 2.配有报警系…

2024AI做PPT软件如何重塑演示文稿的创作

现在AI技术的发展已经可以帮我们写作、绘画&#xff0c;最近我发现了不少ai做ppt的工具&#xff01;不体验不知道&#xff0c;原来合理使用AI工具可以有效的帮我们进行一些办公文件的编写&#xff0c;提高了不少工作效率。如果你也有这方面的需求就接着往下看吧。 1.笔灵AIPPT…

内网穿透out了?黑群晖+IPv6+NAS公网助手的访问体验

科技宅最带折腾黑群晖&#xff0c;这不&#xff0c;尝试一下ipv6动态域名解析&#xff0c;远程访问群晖NAS的方法千千万&#xff0c;这个方法我早就想到了&#xff0c;今天终于体验了一把&#xff0c;把经验分享一下&#xff1a; 目录 黑群晖的魅力 IPv6的加入&#xff1a;无…

Python办公自动化教程(003):PDF的加密

【1】代码 from PyPDF2 import PdfReader, PdfWriter# 读取PDF文件 pdf_reader PdfReader(./file/Python教程_1.pdf) pdf_writer PdfWriter()# 对第1页进行加密 page pdf_reader.pages[0]pdf_writer.add_page(page) # 设置密码 pdf_writer.encrypt(3535)with open(./file/P…

上位机图像处理和嵌入式模块部署(linux小系统开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 和若干年前相比较&#xff0c;现在嵌入式linux开发要简单得多。稍微贵一点的有树莓派&#xff0c;国产的有各种水果派&#xff0c;基本上都可以按照…

苍穹外卖学习日志 -----20天项目从零到完结-----含软件下载,环境配置,框架学习,代码编写,报错处理,测试联调,每日总结,心路历程等等......

年份 2024 基础&#xff1a;Javase Javaweb 已完结 2024 8.25---9.14 20天 Day-01 8.25 今天开始学习已经晚了&#xff0c;网盘下载了一下文件&#xff0c;做了一些开始项目的准备工作。 本来其实打算用notepad来写学习日志的&#xff0c;但是那个传…

如何给bat文件替换好看的图标

最近遇到软件运行在Windows系统&#xff0c;通过bat文件启动&#xff0c;但是bat文件的图标不好看&#xff0c;而且作为启动快捷方式放桌面看上去跟其他软件不搭调&#xff0c;于是得给bat文件换个软件图标。 软件ico图标 Windows系统下使用.ico文件作为软件图标。另外favicon…