2017-07-03 12 views
3

我正在學習平面地圖並想要打印integers的無限序列。如何使用FlatMap打印無限的數字序列?

然而,當我試圖編譯程序它失敗在System.out.println

public class Test{ 
    public static void main(String[] args) { 
    Stream.of("").flatMap(x -> Stream.iterate(1, i -> i + 1)).forEach(System.out.println); 
    } 
} 

有人能幫助我在這,讓我知道我能做到這一點,如果可能的話,請檢查我的代碼打印無限序列integers的問題。

+2

但是'flatMap'在這裏有什麼意義呢? 'Stream.iterate(1,i - > i + 1).forEach(System.out.println);'會做... – Holger

回答

6

簡單:

System.out.println 

的方法參考。您需要

System.out::println 

改爲。請參閱here進行閱讀。關鍵是:flatMap()希望你能夠「打電話」。而System.out.println並不表示可以調用的東西。因此,語法無效!

3

您必須通過ConsumerforEach

您可以使用lambda表達式:

Stream.of("").flatMap(x -> Stream.iterate(1, i -> i + 1)).forEach(i -> System.out.println (i)); 

或方法參考:

Stream.of("").flatMap(x -> Stream.iterate(1, i -> i + 1)).forEach(System.out::println); 

PS,我不知道爲什麼要創建最初的單一元素Stream,然後使用flatMap而不是簡單地創建無限的Stream並在其上運行forEach

Stream.iterate(1, i -> i + 1).forEach(System.out::println); 
+0

@ Eran-業務邏輯很好,從你的知識 –

+0

是的,它工作正常...現在非常感謝。 –

3

你真的應該注意無限流和flatmap,因爲他們計算的熱切順便說一句,不是很瑣碎的理解:

Stream.of("") 
     .flatMap(x -> Stream.iterate(1, i -> i + 1)) 
     .limit(1) // added this one 
     .forEach(System.out::println); 

這將打印1和寫不完 - 的limit是未有效這裏。

相關問題