You need to enable JavaScript to run this app. 如何用Java Stream生成带自增索引、对应不同数量枚举的StorageRoom测试Mock数据
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java Stream生成带自增索引、对应不同数量枚举的StorageRoom测试Mock数据

问题核心原因

当前的Stream实现和原循环逻辑存在两处关键偏差:

  • 没有绑定每个Size枚举对应的顺序索引,无法计算每个尺寸需要生成的实例数量(原逻辑为:顺序索引i从0开始时,对应尺寸生成i+1个实例)
  • 使用1对1的map操作,只能为每个尺寸生成1个实例,无法输出多实例,需要替换为支持1对N输出的flatMap操作做流合并
调整后的可完全对齐原逻辑的实现
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

static List<StorageRoom> createStorageRoomsListStream() {
    AtomicLong idGenerator = new AtomicLong(100L);
    Size[] allSizes = Size.values();
    // 遍历范围和原循环完全一致:从0到枚举总数量-1
    return IntStream.range(0, allSizes.length)
            .flatMap(i -> {
                Size currentSize = allSizes[i];
                // 生成i+1个同尺寸的实例,和原while循环逻辑对齐
                return IntStream.rangeClosed(0, i)
                        .mapToObj(seq -> StorageRoom.builder()
                                .id(idGenerator.getAndIncrement())
                                .size(currentSize)
                                // 显式设置字段值,和原逻辑无偏差
                                .reserved(false)
                                .build());
            })
            .collect(Collectors.toList());
}
逻辑对齐校验
  • 生成顺序完全匹配原循环:从顺序第0个的TELEPHONE_BOX开始,依次处理每个尺寸,每个尺寸生成的实例数量严格为索引值+1
  • id值从100开始连续自增,和原循环的自增规则一致
  • 所有实例的reserved字段显式赋值为false,无字段遗漏
注意事项
  • 不要直接遍历Size.values()而忽略顺序索引:脱离索引后无法精准匹配每个尺寸对应的生成数量,很容易写出固定生成数量的错误逻辑
  • 该场景不要使用并行流:并行流会打乱实例的生成顺序,导致id分配、列表元素顺序和原循环实现不一致,使用默认的顺序流即可完全对齐逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 18:45:04