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

如何在不使用boxed().map()的情况下组合两个IntStream并转成对象流?

如何不使用boxed()实现IntStream的组合流?

现有两个返回IntStream的方法:

static IntStream getKeySizeStream() {
    return IntStream.of(
            128,
            192,
            256
    );
}

static IntStream getBlockSizeStream() {
    return IntStream.of(
            128
    );
}

需求是定义一个新方法,返回这两个流的组合流,当前实现依赖boxed()完成装箱后再处理:

static Stream<Arguments> getKeySizeAndBlockSizeArgumentsStream() {
    return getKeySizeStream().boxed().flatMap(ks -> {
        return getBlockSizeStream()
                .mapToObj(bs -> Arguments.of(ks, bs));
    });
}

可行方案:无需boxed()的实现

完全可以不用boxed(),直接通过IntStream.mapToObj()替代装箱+扁平化的操作,避免不必要的int装箱:

实现代码

static Stream<Arguments> getKeySizeAndBlockSizeArgumentsStream() {
    return getKeySizeStream()
            .mapToObj(ks -> getBlockSizeStream().mapToObj(bs -> Arguments.of(ks, bs)))
            .flatMap(Function.identity());
}

或者更简洁的写法:

static Stream<Arguments> getKeySizeAndBlockSizeArgumentsStream() {
    return getKeySizeStream()
            .mapToObj(ks -> getBlockSizeStream().mapToObj(bs -> Arguments.of(ks, bs)))
            .flatMap(s -> s);
}

原理说明

mapToObj()可以直接将每个int类型的密钥长度映射为一个包含该密钥长度与所有块长度组合的Stream<Arguments>,随后通过flatMap()将所有子流合并为一个完整的流,全程不需要对int值进行装箱操作,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:04:54