• JAVA常用stream流操作demo演示


    demo关联

    视频讲解地址
    工程地址

    引入

    JAVA的stream流操作是jdk8提供的api,搭配lambda表达式和接口函数简直不要太好用了,下面通过几个经典的例子演示一下map、filter、groupBy的使用。

    准备工作

    引入基础对象

    引入一个user对象,对应的字段如下:

    package online.longzipeng.mywebdemo.entity;
    
    import com.baomidou.mybatisplus.annotation.TableName;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.fasterxml.jackson.annotation.JsonFormat;
    import java.util.Date;
    
    import lombok.Builder;
    import lombok.Data;
    
    /**
     * @author lzp
     * @Description: groovy script auto generate 
     */
    @Data
    @TableName("user")
    @Builder
    public class User {
    
        /**
         *  自增id
         */
        @TableId(value = "id", type = IdType.AUTO)
        private Integer id;
    
        /**
         *  nickName
         */
        private String nickName;
    
        /**
         *  年龄
         */
        private Integer age;
    
        /**
         *  1男 2女 0未知
         */
        private Integer sex;
    
        /**
         *  用户名 保证唯一
         */
        private String userName;
    
        /**
         *  创建时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        private Date createTime;
    
    }
    
    

    造数据

    然后咱们使用hutool造一批user数据,注意他们的值都是有规律的,不是乱给的哦

    List<User> users = CollUtil.newArrayList(
    				User.builder().userName("小龙").id(1).age(23).sex(1).build(),
    				User.builder().userName("老王").id(2).age(33).sex(1).build(),
    				User.builder().userName("小白").id(3).age(23).sex(2).build(),
    				User.builder().userName("李华").id(4).age(23).sex(2).build(),
    				User.builder().userName("韩梅梅").id(5).age(18).sex(2).build(),
    				User.builder().userName("大头").id(6).age(25).sex(1).build(),
    				User.builder().userName("张飞").id(7).age(25).sex(1).build()
    		);
    

    stream操作

    然后咱们按照一些指定动作对数据进行操作

    取出id集合

    咱们直接使用stream中的.map 方法就可以实现,代码如下

    /// .map 取出id集合
    List<Integer> ids = users.stream().map(User::getId).collect(Collectors.toList());
    System.out.println("=====================ids为==================================");
    System.out.println(ids);
    

    输出结果为:
    在这里插入图片描述

    取出年龄小于25的对象

    咱们直接使用stream中的.filter 方法就可以实现,代码如下

    /// .filter 年龄小于25的
    List<User> users2 = users.stream().filter(u -> u.getAge() < 25).collect(Collectors.toList());
    System.out.println("=====================年龄小于25================================");
    System.out.println(users2);
    

    输出结果为:
    在这里插入图片描述

    按age分组

    咱们直接使用Collectors.groupingBy方法就可以实现,代码如下

    /// 按age分组
    Map<Integer, List<User>> map1 = users.stream().collect(Collectors.groupingBy(User::getAge));
    System.out.println("=====================按age分组==================================");
    System.out.println(map1);
    

    输出结果为:
    在这里插入图片描述

    按age分组,只留id最大的那一个 k v 形式

    咱们直接使用Collectors.toMap方法就可以实现,代码如下

    /// 按age分组,只留id最大的那一个 k v 形式
    Map<Integer, User> map2 = users.stream()
    		.collect(Collectors.toMap(User::getAge, o -> o, 
    				(o1, o2) -> o1.getId() > o2.getId() ? o1 : o2));
    System.out.println("=====================按age分组,只留id最大的那一个 k v 形式==================================");
    System.out.println(map2);
    

    输出结果为:
    在这里插入图片描述

    完整demo代码

    package online.longzipeng.mywebdemo;
    
    import cn.hutool.core.collection.CollUtil;
    import online.longzipeng.mywebdemo.entity.User;
    
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    /**
     * @Author: lzp
     * @description: 常用Stream流演示
     * @Date: 2022/9/20
     */
    public class StreamDemo {
    
    	public static void main(String[] args) {
    		List<User> users = CollUtil.newArrayList(
    				User.builder().userName("小龙").id(1).age(23).sex(1).build(),
    				User.builder().userName("老王").id(2).age(33).sex(1).build(),
    				User.builder().userName("小白").id(3).age(23).sex(2).build(),
    				User.builder().userName("李华").id(4).age(23).sex(2).build(),
    				User.builder().userName("韩梅梅").id(5).age(18).sex(2).build(),
    				User.builder().userName("大头").id(6).age(25).sex(1).build(),
    				User.builder().userName("张飞").id(7).age(25).sex(1).build()
    		);
    		/// .map 取出id集合
    		List<Integer> ids = users.stream().map(User::getId).collect(Collectors.toList());
    		System.out.println("=====================ids为==================================");
    		System.out.println(ids);
    
    		/// .filter 年龄小于25的
    		List<User> users2 = users.stream().filter(u -> u.getAge() < 25).collect(Collectors.toList());
    		System.out.println("=====================年龄小于25==================================");
    		System.out.println(users2);
    
    		/// 按age分组
    		Map<Integer, List<User>> map1 = users.stream().collect(Collectors.groupingBy(User::getAge));
    		System.out.println("=====================按age分组==================================");
    		System.out.println(map1);
    		
    		/// 按age分组,只留id最大的那一个 k v 形式
    		Map<Integer, User> map2 = users.stream()
    				.collect(Collectors.toMap(User::getAge, o -> o,
    						(o1, o2) -> o1.getId() > o2.getId() ? o1 : o2));
    		System.out.println("=====================按age分组,只留id最大的那一个 k v 形式==================================");
    		System.out.println(map2);
    		/// 年龄小于25的 id集合
    		List<Integer> ids2 = users.stream().filter(u -> u.getAge() < 25).map(User::getId).collect(Collectors.toList());
    	}
    }
    
    
  • 相关阅读:
    linux硬件中断处理流程3----NAPI
    gitlab--基础--4.4--CICD--runner--配置
    从三个阶段讲讲,网关类接口都要测什么
    spring之mvc中@RequestMapping注解具有什么功能呢?
    以YOLOv5为基准实现布匹缺陷检测(Fabric Defect Detection)
    法律战爆发:“币安退出俄罗斯引发冲击波“
    springboot 等待批量异步任务完成
    机器学习入门(1)
    yolo系列配置文件解析,内容来自官方
    yolo系列模型训练数据集全流程制作方法(附数据增强代码)
  • 原文地址:https://blog.csdn.net/qq_42365534/article/details/127117419