java 8 lambda表达式对list进行分组

java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重。跟之前的传统写法对比,能少写不少代码。
分组函数groupingBy()

分组函数示例:

java 复制代码
 Map<String, List<Workers>> groupBySex = 
 WorkersList.stream()
 .filter(v->v.getName()!=null)
 .collect(Collectors.groupingBy(Workers::getName));

从WorkersList中筛选出name不为空的数据,再对这些数据按照name进行分组,分组结果是一个map。

1.创建实体类

java 复制代码
import java.math.BigDecimal;
import java.util.Date;
public class Workers {

    private Long id;

    //姓名
    private String name;

    //年龄
    private int age;

    //工号
    private String jobNumber;

    //性别
    private String sex;

    //入职日期
    private Date entryDate;

    //家庭成员数量
    private BigDecimal familyMemberQuantity;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getJobNumber() {
        return jobNumber;
    }

    public void setJobNumber(String jobNumber) {
        this.jobNumber = jobNumber;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getEntryDate() {
        return entryDate;
    }

    public void setEntryDate(Date entryDate) {
        this.entryDate = entryDate;
    }

    public BigDecimal getFamilyMemberQuantity() {
        return familyMemberQuantity;
    }

    public void setFamilyMemberQuantity(BigDecimal familyMemberQuantity) {
        this.familyMemberQuantity = familyMemberQuantity;
    }
}

2.分组

通过groupingBy可以分组指定字段

java 复制代码
public class Application {

    public static void main(String[] args) {
        List<Workers> WorkersList = new ArrayList<>();
        Workers workers = new Workers();
        workers.setAge(23);
        workers.setName("jimmy");
        workers.setJobNumber("mk");
        Workers worker = new Workers();
        worker.setAge(19);
        worker.setName("gigi");
        worker.setJobNumber("mimi");
        WorkersList.add(workers);
//分组
        Map<String, List<Workers>> groupBySex = WorkersList.stream().filter(v->v.getName()!=null).collect(Collectors.groupingBy(Workers::getName));
        //遍历分组
        for (Map.Entry<String, List<Workers>> entryWorkers : groupBySex.entrySet()) {
            String key = entryWorkers.getKey();
            List<Workers> entryWorkersList = entryWorkers.getValue();
            System.out.println(entryWorkersList);
        }
    }
}

注意:

(1)上面的分组存在key空值安全问题,需要做过滤或封装处理,这里用到的过滤方法是:

java 复制代码
filter(v->v.getName()!=null)
相关推荐
狼爷12 小时前
如何防止重复提交订单?——从踩坑到优雅落地的实战指南
java·架构
zhangkaixuan45613 小时前
Flink 写入 Paimon 流程:Checkpoint 与 Commit 深度剖析
java·开发语言·微服务·flink·paimon
爱吃程序猿的喵13 小时前
Spring Boot 常用注解全面解析:提升开发效率的利器
java·spring boot·后端
Tracy-2213 小时前
广东专升本计算机C语言
c语言·开发语言
我根本不会啊13 小时前
2025 11 09 作业
java·linux·服务器
熙客13 小时前
SpringBoot项目如何使用Log4j2+SLF4J构建日志
java·spring boot·log4j
多多*13 小时前
牛客周赛 Round 117 ABCDE 题解
java·开发语言·数据结构·算法·log4j·maven
liu****13 小时前
13.POSIX信号量
linux·开发语言·c++·算法·1024程序员节
WZTTMoon13 小时前
从 “完整对象” 视角看Spring 循环依赖
java·spring boot·后端·spring
baviya13 小时前
一文彻底搞懂 Maven 依赖——从 <dependency> 到依赖冲突,带你看懂 Maven 的“江湖规矩”
java·maven