亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何連接兩個 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 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號