gpt4 book ai didi

java - 如何连接两个 IntStreams?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:28 26 4
gpt4 key购买 nike

我想创建一个 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() .

所以问题是,我如何通过流创建一个包含这些值的列表(注意初始拆分)(因为这似乎比循环更平滑)?我是否应该创建完整列表并在之后删除不需要的项目(在较大的差距上不可行)?

最佳答案

您正在传递给 concat两个 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());

如果您打算包括 129,则只是一个旁注和 200在流中,你应该使用 IntStream.rangeClosed (结尾是排他的)

关于java - 如何连接两个 IntStreams?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54629725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com