为了账号安全,请及时绑定邮箱和手机立即绑定

如何连接两个 IntStream?

如何连接两个 IntStream?

Cats萌萌 2022-06-15 15:58:42
我想List<String>用 72-129 和 132-200 的数值创建一个。我考虑过使用一个IntStream并将值映射到字符串并收集到一个列表。我使用了这段代码:List<String> strings72to200 = Stream         .concat(Stream.of(IntStream.range(72, 129)), Stream.of(IntStream.range(132, 200)))         .map(e -> String.valueOf(e)).collect(Collectors.toList());但是,如果我调试 的实际值strings72to200,我会得到:[java.util.stream.IntPipeline$Head@56d13c31, java.util.stream.IntPipeline$Head@5f9127c5]我相信Stream.concat()以及.map()导致这种情况,因为我确实有这样的工作代码:List<String> strings50to59 = IntStream.range(50, 60).mapToObj(e -> String.valueOf(e))         .collect(Collectors.toList());请注意,这件作品使用.mapToObj()而不是.map().所以问题是,我怎样才能通过流创建一个包含这些值的列表(注意初始拆分)(因为这似乎比循环更平滑)?我是否应该创建完整列表并在之后删除不需要的项目(在更大的差距上不可行)?
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

你传递给concattwo Stream<IntStream>,这不起作用(你想要一个整数流)。你需要给它两个Stream<Integer>

List<String> strings72to200 = Stream
        .concat(IntStream.range(72, 129).boxed(), 
                IntStream.range(132, 200).boxed())
        .map(String::valueOf)
        .collect(Collectors.toList());

顺便说一句,如果您打算在流中包含129200,您应该使用IntStream.rangeClosed(结尾是独占的)


查看完整回答
反对 回复 2022-06-15
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

您可能只是在寻找boxed那里得到 aStream<Integer>然后连接:

List<String> strings72to200 = Stream.concat(
            IntStream.range(72, 129).boxed(), // to convert to Stream<Integer>
            IntStream.range(132, 200).boxed())
        .map(String::valueOf) // replaced with method reference 
        .collect(Collectors.toList());

编辑:如果您只是IntStream从给定的输入中获取一个,您可以将它们连接为:

IntStream concatenated =  Stream.of(
        IntStream.range(72, 129),
        IntStream.range(132, 200))
    .flatMapToInt(Function.identity());

或者干脆

IntStream concatenated =  IntStream.concat(
        IntStream.range(72, 129),
        IntStream.range(132, 200));


查看完整回答
反对 回复 2022-06-15
?
SMILET

TA贡献1796条经验 获得超4个赞

问题是您正在创建 a Streamof IntStreams 并Stream.conact()在其中获得 aStream<IntStream>而不是 a Stream<Integer>。你可以IntStream.concat()这样解决这个问题:

List<String> result = IntStream.concat(IntStream.rangeClosed(72, 129), IntStream.rangeClosed(132, 200))
        .mapToObj(String::valueOf)
        .collect(Collectors.toList());

如果您愿意并成为结果的一部分,您也应该使用IntStream.rangeClosed()而不是。IntStream.range()129200


查看完整回答
反对 回复 2022-06-15
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信