You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Stream API将计数Map<Object,Integer>的数据收集为List<Object>

实现方案

核心逻辑是遍历Map的每一组键值对,将单个key按对应的计数展开为多个重复元素,最后合并为List即可,以下是兼容不同JDK版本的写法:

Java 8 及以上通用写法

使用IntStream.range生成指定次数的元素,兼容性最好:

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

// 假设你的Map变量名为nominalCountMap
List<Nominal> result = nominalCountMap.entrySet().stream()
        // 每个键值对展开为 count 个重复的key
        .flatMap(entry -> IntStream.range(0, entry.getValue())
                .mapToObj(i -> entry.getKey())
        )
        // JDK 16以下版本用Collectors.toList()
        .collect(Collectors.toList());
        // JDK 16及以上可以直接用.toList(),得到的是不可变List
        // .toList();

Java 9 及以上简化写法

可以用Stream.generate更直观的生成重复元素:

import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

List<Nominal> result = nominalCountMap.entrySet().stream()
        .flatMap(entry -> Stream.generate(() -> entry.getKey())
                .limit(entry.getValue())
        )
        .toList();

补充说明

  • 如果你的Map是有序实现(比如LinkedHashMap),生成的List会严格保留Map的键顺序,和示例输出的顺序完全一致;如果是HashMap需要固定排序,可以在entrySet().stream()后加sorted(Map.Entry.comparingByKey())按key排序即可。
  • 如果计数可能存在null或者负数的情况,可以提前加过滤逻辑:.filter(entry -> entry.getValue() != null && entry.getValue() > 0),避免出现异常或者冗余元素。

内容的提问来源于stack exchange,提问作者NeverSleeps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:12:00