【Stream】讲常见数据结构转为map<String,Long>

1. 集合 → 转成 Map<String, Long>(最常用)

场景:对象集合 → key = 名称,value = 数量 / ID

复制代码
// 1. 准备一个实体类
@Data
class Product {
    private String name;  // String 类型 key
    private Long stock;   // Long 类型 value
}

// 2. 构造数据
List<Product> list = List.of(
    new Product("苹果", 100L),
    new Product("香蕉", 200L),
    new Product("橙子", 300L)
);

// 3. Stream 转 Map<String, Long>
Map<String, Long> map = list.stream()
    .collect(Collectors.toMap(
        Product::getName,    // key:String
        Product::getStock,   // value:Long
        (oldVal, newVal) -> oldVal // 重复 key 解决方案
    ));

2. List<String> → 统计次数 → Map<String, Long>

场景:统计字符串出现次数

复制代码
List<String> list = List.of("苹果", "苹果", "香蕉", "橙子", "香蕉");

Map<String, Long> countMap = list.stream()
    .collect(Collectors.groupingBy(
        item -> item,          // key
        Collectors.counting()   // value:Long 类型计数
    ));

结果:{苹果=2, 香蕉=2, 橙子=1}


3. 数组 / List → 自己指定 key 和 value

java

运行

复制代码
List<User> list = ...;

Map<String, Long> map = list.stream()
    .collect(Collectors.toMap(
        User::getUsername,    // String key
        User::getId,          // Long value
        (v1, v2) -> v1        // 重复 key 保留旧值
    ));

4. 按字段分组 → 求和 → Map<String, Long>

场景:按商品名称统计总库存(超级常用)

java

运行

复制代码
Map<String, Long> stockSumMap = list.stream()
    .collect(Collectors.groupingBy(
        Product::getName,
        Collectors.summingLong(Product::getStock)
    ));

5. 过滤后再转 Map

java

运行

复制代码
Map<String, Long> map = list.stream()
    .filter(p -> p.getStock() > 0)
    .collect(Collectors.toMap(
        Product::getName,
        Product::getStock,
        (o, n) -> o
    ));

6. 解决重复 key 报错(必须掌握)

如果有重复 name,会报错,必须加:

java

运行

复制代码
(oldVal, newVal) -> oldVal   // 保留旧值
// 或
(oldVal, newVal) -> newVal   // 覆盖旧值

✔ 3 句万能口诀

  1. 对象集合 → toMap (key, value)
  2. 统计次数 → groupingBy + counting ()
  3. 分组求和 → groupingBy + summingLong ()
相关推荐
AI算法沐枫9 分钟前
深度学习python代码处理科研测序数据
数据结构·人工智能·python·深度学习·决策树·机器学习·线性回归
X1A0RAN1 小时前
解决Pycharm中部分文件或文件夹被隐藏不展示问题
ide·python·pycharm
MomentYY1 小时前
第 3 篇:让 Agent 学会分工,LangGraph 构建多 Agent系统
人工智能·python·agent
程序员Jelena1 小时前
Python 代码是什么?—— 从字节到执行的完整解析
python
测试员周周2 小时前
【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行
开发语言·人工智能·python·功能测试·ui·appium·pytest
m0_629494732 小时前
LeetCode 热题 100-----26.环形链表 II
数据结构·算法·leetcode·链表
用户8356290780512 小时前
Python 操作 PowerPoint OLE 对象
后端·python
壹号用户2 小时前
用队列实现栈
数据结构·算法
小江的记录本2 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
张登杰踩3 小时前
DINOv2 with Registers 系列模型详解:Giant 版本规格、Register Token 机制与使用指南
python·numpy