【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 ()
相关推荐
迅猛龙办公室7 小时前
python实现倒序输出数字
开发语言·python
h397411 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
全栈练习生16 小时前
AI Agent 沙箱
python·ai
码完就睡16 小时前
数据结构——红黑树
数据结构
码爸17 小时前
数据结构详细介绍
数据结构
SEO_juper17 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
java资料站17 小时前
二、Spring AI Alibaba · ChatModel
java·windows·spring
用户83562907805118 小时前
使用 Python 对 Excel 工作表进行排序
后端·python
北冥you鱼18 小时前
Go 语言空接口(interface{})使用场景与最佳实践
开发语言·windows·golang
for_ever_love__18 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram