每日一課 | 示例 Java 8 Stream 的 iterate 處理

2021-03-02 Java雲筆記

在Java 8中,我們可以使用Stream.iterate創建流值,即所謂的無限流。

1. Stream.iterate

1.1 0 – 9流


//Stream.iterate(initial value, next value) Stream.iterate(0, n -> n + 1) .limit(10)                .forEach(x -> System.out.println(x));

輸出量

0

1

2

3

4

5

6

7

8

9

1.2僅奇數流。

Stream.iterate(0, n -> n + 1) .filter(x -> x % 2 != 0) //odd .limit(10)      .forEach(x -> System.out.println(x));

輸出量

1

3

5

7

9

11

13

15

17

19

1.3一個經典的斐波那契例子。


Stream.iterate(new int[]{0, 1}, n -> new int[]{n[1], n[0] + n[1]}) .limit(20) .map(n -> n[0])    .forEach(x -> System.out.println(x));

輸出量


01123581321345589144233377610987159725844181

1.4將所有斐波那契值相加。

int sum = Stream.iterate(new int[]{0, 1}, n -> new int[]{n[1], n[0] + n[1]}) .limit(10) .map(n -> n[0]) // Stream<Integer> .mapToInt(n -> n) .sum();
System.out.println("Fibonacci 10 sum : " + sum)

輸出量

2. Java 9

Java 9中對stream.iterate進行了增強。它支持謂詞(條件)作為第二個參數,並且如果謂詞為false, stream.iterate將停止。

2.1如果n >= 20則停止流迭代

Stream.iterate(1, n -> n < 20 , n -> n * 2)           .forEach(x -> System.out.println(x));

1

2

4

8

16

參考文獻

Oracle文檔– Java Stream迭代

翻譯自: https://mkyong.com/java8/java-8-stream-iterate-examples/

今日福利👇

推薦閱讀--

相關焦點

  • Java Stream
    流是Java API的新成員,它允許你以聲明性方式處理數據集合(通過查詢語句來表達,而不是臨時編寫一個實現)Java 8中的Stream
  • 基礎篇:JAVA.Stream函數,優雅的數據流操作
    java提供了Stream的概念,它可以讓我們把集合數據當做一個個元素在處理,並且提供多線程模式並發流和CompletableFuture的配合使用「關注公眾號,一起交流,微信搜一搜: 潛行前行」1 stream的構造方式stream內置的構造方法public static<T> Stream
  • 18 個示例帶你掌握 Java 8 日期時間處理!
    Java處理日期、日曆和時間的方式一直為社區所詬病,將 java.util.Date設定為可變類型,以及SimpleDateFormat的非線程安全使其應用非常受限。新API基於ISO標準日曆系統,java.time包下的所有類都是不可變類型而且線程安全。
  • Java 8 中處理集合的優雅姿勢——Stream
    相比之下,關係型資料庫中也同樣有這些操作,但是在Java 8之前,集合和數組的處理並不是很便捷。不過,這一問題在Java 8中得到了改善,Java 8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數據。本文就來介紹下如何使用Stream。
  • Java 8中處理集合的優雅姿勢——Stream
    相比之下,關係型資料庫中也同樣有這些操作,但是在Java 8之前,集合和數組的處理並不是很便捷。不過,這一問題在Java 8中得到了改善,Java 8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數據。本文就來介紹下如何使用Stream。特別說明一下,關於Stream的性能及原理不是本文的重點,如果大家感興趣後面會出文章單獨介紹。
  • Java8 Stream:2萬字20個實例,玩轉集合的篩選、歸約、分組、聚合
    用傳統的迭代處理也不是很難,但代碼就顯得冗餘了,跟Stream相比高下立判。1 Stream概述Java 8 是一個非常成功的版本,這個版本新增的Stream,配合同版本出現的 Lambda ,給我們操作集合(Collection)提供了極大的便利。
  • JAVA8 新特性詳解
    在Java 8之前一般某個函數應該返回非空對象但是偶爾卻可能返回了null,而在Java 8中,不推薦你返回null而是返回Optional。創建stream–通過iterate方法也是生成無限長度的Stream,和generator不同的是,其元素的生成是重複對給定的種子值(seed)調用用戶指定函數來生成的。
  • Java 8 Map,Filter和Collect示例
    如何在Java 8中使用Map和Filter你需要一個很好的例子來理解這些概念。由於String和Integer是Java中最常見的數據類型,因此我選擇了一個既簡單又有趣的示例。我有一個String列表,例如{「1」,「2」,「3」,「4」,「5」,「6」}。我想處理這個列表,需要另一個只有偶數的整數列表。
  • Java Stream Pipeline 流水線:Stream 基礎
    關注我們,設為星標,每天7:00不見不散,每日
  • 每日一課 | Java Final關鍵字示例
    FinalVariableExample.javapackage com.mkyong;public class FinalVariableExample {  final int count = 0;   public FinalVariableExample()
  • Java 8的Stream代碼,你能看懂嗎?
    相比之下,關係型資料庫中也同樣有這些操作,但是在Java 8之前,集合和數組的處理並不是很便捷。不過,這一問題在Java 8中得到了改善,Java 8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數據。本文就來介紹下如何使用Stream。特別說明一下,關於Stream的性能及原理不是本文的重點,如果大家感興趣後面會出文章單獨介紹。
  • 系統學習Stream,看這篇就夠了!
    我們再細看下,從這方法的名字上去理解,首先通過stream從List獲得Stream,然後可以使用流式操作處理數據,先是filter篩選出語文課且不及格的考卷,接著sorted對分數排序,再是map獲得每個Paper中的學生名字,最後collect把所有的名字收集成一個List。
  • 每日一課 | 如何將Java對象讀取和寫入文件
    如果Java對象的類或其任何超類實現java.io.Serializable接口或其子接口java.io.Externalizable ,則該對象是可序列化的。1.下面的示例顯示了用Java編寫對象和讀取對象的完整周期。在讀取對象時, ObjectInputStream直接嘗試將所有屬性映射到我們嘗試將讀取對象轉換為的類中。如果無法準確地映射相應的對象,則將引發ClassNotFound異常。現在讓我們使用一個示例來了解寫作和閱讀過程。我們將上面顯示的Person類用作對象。
  • Java學習進階-Stream流
    ().filter(name -> name.length() == 3).limit(3).forEach(name -> System.out.println(name));package com.p03Stream獲取流;import java.util.ArrayList;import java.util.List
  • 每日一課 | Java Static關鍵字示例
    Employee.java package com.mkyong;public class Employee {  static int count = 0;  private String name;
  • 18 個 Java 8 日期處理的工具類
    Java處理日期、日曆和時間的方式一直為社區所詬病,將 java.util.Date設定為可變類型,以及SimpleDateFormat的非線程安全使其應用非常受限。新API基於ISO標準日曆系統,java.time包下的所有類都是不可變類型而且線程安全。
  • 每日一課 | Java –比較枚舉值
    Java枚舉示例Language.javapackage com.mkyong.java public enum Language {    JAVA,    PYTHON,    NODE,    NET,    RUBY}2.與==比較將枚舉值與==運算符進行比較的示例。
  • 每日一課 | Java 8 中 ZonedDateTime 與 Timestamp 的相互轉換
    Java示例,反之亦然。ZonedDateTime->時間戳TimeExample1.java package com.mkyong.jdbc; import java.sql.Timestamp;import java.time.ZonedDateTime
  • Java簡潔之道:如何優雅地玩轉List
    對於List存儲數據的處理,如排序、篩選等操作,我們通常使用Iterator或者Foreach的方式對集合進行遍歷,並通過if.else.判斷完成數據的處理,代碼如下所示,這樣的代碼看起來十分冗長,不易於維護。對於一個崇尚代碼簡潔的程式設計師來說,這是不能容忍的!
  • 黑客日教程-對比集合的STREAM().FOREACH()和FOREACH()
    1.簡介在java中有多種方式對集合進行遍歷。本教程中將看兩個類似的方法 Collection.stream().forEach()和Collection.forEach()。在大多數情況下,兩者都會產生相同的結果,但是,我們會看到一些微妙的差異。