当前位置: 首页 > news >正文

Java中如何使用lambda表达式分类groupby

Java中如何使用lambda表达式分类groupby

  • Java中如何使用lambda表达式分类groupby
      • 分类问题场景
      • 传统手写方式
      • lambda使用groupBy()方法一行结束!!!
      • 完整代码

Java中如何使用lambda表达式分类groupby

分类问题场景

比如一群学生根据性别和年龄排队,Student类有性别gender、年龄age属性,将同性别,同年龄的学生归为一类

genderagename队伍
man12Li Hua队伍1
man12Zhang San队伍1
man13Li Si队伍2
woman12Xiao Hua队伍3
woman12Xiao Fang队伍3

传统手写方式

使用for循环遍历

public static void main(String[] args) {// 读取学生信息List<Student> students = generateStudents();// 排队Map<String, Map<Integer, List<Student>>> queue = queueUp(students);// 打印队伍结果printQueue(queue);
}private static Map<String, Map<Integer, List<Student>>> queueUp(List<Student> students) {// 队伍结果Map<String, Map<Integer, List<Student>>> queue = new HashMap<>();// 传统排队方式for (Student student : students) {if (!queue.containsKey(student.getGender())) {queue.put(student.getGender(), new HashMap<>());}Map<Integer, List<Student>> ageMap = queue.get(student.getGender());if (!ageMap.containsKey(student.getAge())) {List<Student> list = new ArrayList<>();list.add(student);ageMap.put(student.getAge(), list);} else {ageMap.get(student.getAge()).add(student);}}return queue;
}

输出结果

|gender|age|name      |
|------|---|----------|
|woman |12 |Xiao Hua  |
|woman |12 |Xiao Fang |
|man   |12 |Li Hua    |
|man   |12 |Zhang San |
|man   |13 |Li Si     |

lambda使用groupBy()方法一行结束!!!

private static Map<String, Map<Integer, List<Student>>> queueUpWithLambda(List<Student> students) {return students.stream().collect(Collectors.groupingBy(Student::getGender, Collectors.groupingBy(Student::getAge)));
}

完整代码

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;public class DemoForGroupBy {@Getter@Setter@NoArgsConstructor@AllArgsConstructorpublic static class Student {private String gender;private int age;private String name;}public static void main(String[] args) {// 读取学生信息List<Student> students = generateStudents();// 排队Map<String, Map<Integer, List<Student>>> queue = queueUp(students);// 打印队伍结果printQueue(queue);queue = queueUpWithLambda(students);printQueue(queue);}private static Map<String, Map<Integer, List<Student>>> queueUp(List<Student> students) {// 队伍结果Map<String, Map<Integer, List<Student>>> queue = new HashMap<>();// 传统排队方式for (Student student : students) {if (!queue.containsKey(student.getGender())) {queue.put(student.getGender(), new HashMap<>());}Map<Integer, List<Student>> ageMap = queue.get(student.getGender());if (!ageMap.containsKey(student.getAge())) {List<Student> list = new ArrayList<>();list.add(student);ageMap.put(student.getAge(), list);} else {ageMap.get(student.getAge()).add(student);}}return queue;}private static Map<String, Map<Integer, List<Student>>> queueUpWithLambda(List<Student> students) {return students.stream().collect(Collectors.groupingBy(Student::getGender, Collectors.groupingBy(Student::getAge)));}private static List<Student> generateStudents() {List<Student> students = new ArrayList<>();String[] genderArray = new String[]{"man", "man", "man", "woman", "woman"};int[] ageArray = new int[]{12, 12, 13, 12, 12};String[] nameArray = new String[]{"Li Hua", "Zhang San", "Li Si", "Xiao Hua", "Xiao Fang"};for (int i = 0; i < nameArray.length; i++) {Student student = new Student(genderArray[i], ageArray[i], nameArray[i]);students.add(student);}return students;}private static void printQueue(Map<String, Map<Integer, List<Student>>> queue) {System.out.printf("|%-6s|%-3s|%-10s|%n", "gender", "age", "name");System.out.printf("|%-6s|%-3s|%-10s|%n", "------", "---", "----------");for (Map.Entry<String, Map<Integer, List<Student>>> entry : queue.entrySet()) {for (Map.Entry<Integer, List<Student>> e : entry.getValue().entrySet()) {for (Student student : e.getValue()) {System.out.printf("|%-6s|%-3d|%-10s|%n", student.getGender(), student.getAge(), student.getName());}}}}}
http://www.dtcms.com/a/251557.html

相关文章:

  • STL容器分类总结
  • 探索RAGFlow:解锁生成式AI的无限潜能(2/6)
  • 第二十章 Centos8的使用
  • DP刷题练习(三)
  • linux thermal framework(4)_thermal governor
  • Linux 忘记root密码如何解决-linux025
  • 2.1 Windows VS2019编译FFmpeg 4.4.1
  • PCL 生成圆柱面点云
  • 人工智能-准确率(Precision)、召回率(Recall) 和 F1 分数
  • YOLO优化之双池化下采样融合块、注意力引导逆残差块
  • 第20篇:数据库中间件的热点 Key 缓存一致性策略与分布式协调机制
  • Spring Boot 整合 Swagger 快速生成 API 文档的最佳实践
  • Axure应用交互设计:中继器数据向多种类型元件赋值
  • jxWebUI--简单易用的webUI库
  • Iceberg与Hive集成深度
  • linux多线程之条件变量
  • 学习昇腾开发的第三天--将服务器连接网络
  • Android 与 ESP-01 WIFI模块通信
  • HTTP协议简易入门
  • Vue3相关知识3
  • JS当中怎么定义一个类
  • Linux信号机制:进程异步通信的秘密
  • Kafka 可靠性保障:消息确认与事务机制(一)
  • XR-RokidAR-UXR3.0-Draggable 脚本解析
  • HTML的最基础入门知识,从零开始逐步讲解,适合为后续爬虫技术打基础:
  • 苏州SAP代理商:哲讯科技助力企业数字化转型
  • [python] 堆
  • 贝塞尔曲线的公式推导贝塞尔曲线的公式推导,和 SVG 中 Path 的贝塞尔曲线指令的理解记忆
  • 体验AI智能投资!AI Hedge Fund了解一下
  • Langflow 构建多代理和 RAG 应用的可视化框架