我想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());
Run Code Online (Sandbox Code Playgroud)
但是,如果我调试实际值strings72to200,我得到这个:
[java.util.stream.IntPipeline$Head@56d13c31, java.util.stream.IntPipeline$Head@5f9127c5]
Run Code Online (Sandbox Code Playgroud)
我相信这个Stream.concat()以及.map()导致这个问题,因为我有一个像这样的工作代码:
List<String> strings50to59 = IntStream.range(50, 60).mapToObj(e -> String.valueOf(e))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
请注意,这件作品使用的是.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());
Run Code Online (Sandbox Code Playgroud)
只是一个附注,如果你打算包括129和200在流中,你应该使用IntStream.rangeClosed(结束是独家的)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |