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

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

生成一個包含整數 (0, 1, -1, 2, -2, 3, -3, ...) 的無限 Stream

生成一個包含整數 (0, 1, -1, 2, -2, 3, -3, ...) 的無限 Stream

犯罪嫌疑人X 2023-03-17 15:45:53
我目前正在準備考試并正在執行以下任務:生成包含整數的無限流(0, 1, -1, 2, -2, 3, -3, ...)。以下流生成正常的無限流:Stream<Integer> infiniteStream = Stream.iterate(1, i -> i + 1);是否有同時產生正數和負數的方法或 lambda 表達式?
查看完整描述

4 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

是這樣的:

Stream<Integer> infiniteStream = Stream.iterate(1, i -> i > 0 ? -i : (-i + 1));

或者,如果你想開始0

Stream<Integer> infiniteStream = Stream.iterate(0, i -> i > 0 ? -i : (-i + 1));

當然,這也可以通過以下方式完成IntStream

IntStream infiniteStream = IntStream.iterate(0, i -> i > 0 ? -i : (-i + 1));


查看完整回答
反對 回復 2023-03-17
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

我想提供一個替代 Erans 答案的方法。


由于您已經知道基本的無限流是如何工作的,因此您可以使用進一步的流操作,例如flatMap在它的基礎上構建:


    final Stream<Integer> eransAnswer = Stream.iterate(1, i -> i > 0 ? -i : (-i + 1));


    final Stream<Integer> alternative = Stream.iterate(1, i -> i + 1)

            .flatMap(i -> Stream.of(i, -i));


    System.out.println(eransAnswer.limit(6).collect(Collectors.toList()));

    System.out.println(alternative.limit(6).collect(Collectors.toList()));

flatMap請注意,這僅在延遲評估時才有效。我把 放在limit那里,這樣我就可以在某個結果 ( toList) 中收集它,但它也適用limit于flatMap.


有時,與其將“復雜性”放入您的生成公式中,不如將其拆分并使用中間流操作可能有意義也可能沒有意義。如果您的思維過程是交替數字,請使用 Erans 答案。如果你寧愿認為對于無限的自然數流,你想用它的倒數復制每個數字,而不是用替代方案更清楚地傳達意圖。


編輯:要處理零,你可以做Stream.concat(Stream.of(0), alternative)


查看完整回答
反對 回復 2023-03-17
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

如果您仔細觀察下面的方案,它可能比您想象的要容易得多:


0  1   2    3    4    5


|  |   |    |    |    |


0  1  (-1)  2   (-2)  3

現在,您可以這樣看:如果數字是偶數,則結果是該索引除以二(并減去它);如果數字是奇數,則結果是該索引除以 2 加 1。


您可以通過簡單地查看最后一位來判斷數字是奇數還是偶數:if it is 1=> odd; 如果它是0=> 偶數。您可以通過將數字向右移動一次來將數字除以二,如下所示:


IntStream.range(0, 10)

         .map(x -> (x & 1) == 0 ? -(x >> 1) : (x >> 1) + 1)

         .forEachOrdered(System.out::println);


查看完整回答
反對 回復 2023-03-17
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

如果你想讓負數引出一對整數并顯示 -1,1,-2,2,-3,3,.. 你并執行此操作。


IntStream.iterate(1, i -> i + 1).flatMap(a -> IntStream.of(-a, a));

IntStream.iterate(-1,i -> i < 0 ? -i: -i - 1);


查看完整回答
反對 回復 2023-03-17
  • 4 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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