【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 ()
相关推荐
小猴子爱上树2 分钟前
一站式解决图片视频翻译难题的高效AI工具
人工智能·python·音视频
weixin_5386019716 分钟前
智能体测开Day31
开发语言·python
lbb 小魔仙23 分钟前
Git + Python 项目工作流最佳实践:pre-commit、CI、CHANGELOG 自动化
git·python·ci/cd
yuannl1025 分钟前
图的深度优先遍历DFS
数据结构
dyxal28 分钟前
最长公共子序列(LCS)
python·算法
你驴我1 小时前
WhatsApp Cloud API 速率限制下的令牌桶与退避策略实践
网络·后端·python
AC赳赳老秦1 小时前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例
java·大数据·python·数据挖掘·数据分析·php·openclaw
小大宇2 小时前
Python 集成 Conda
开发语言·python·conda
初学者,亦行者2 小时前
利用Pyecharts绘制堆叠柱状图
python·信息可视化·数据分析
林泽毅2 小时前
PyTRIO:当强化学习不再需要本地GPU
人工智能·python·深度学习·机器学习