2016-03-28 6 views
5

Ich bin verwirrt darüber, wie man eine unendliche Sequenz in Kotlin für die faule Auswertung zu erstellen.Kotlin unendliche Sequenzen mit Iterator-Funktion

in Java:

IntStream.iterate(0, i -> i + 2) 
    .limit(100) 
    .forEach(System.out::println); 

aber Sequenzen scheinen viel mehr verwirrend dann Java-Streams. Das Sequenz-Konstruktor ist verwirrend sehr die doc denn es heißt:

/** 
* Given an [iterator] function constructs a [Sequence] that returns values through the [Iterator] 
* provided by that function. 
* The values are evaluated lazily, and the sequence is potentially infinite. 
*/ 

aber ich weiß nicht, was es bedeutet, von einer Iterator-Funktion oder wie möglich zu gestalten.

Ich habe dies kompiliert aber offensichtlich nichts gedruckt. Ich denke nicht, dass meine Iterator-Funktion einen Sinn ergibt. Es möchte eine Funktion, die keine Argumente annimmt und einen Iterator zurückgibt, der überhaupt nicht wie die java .iterate-Funktion ist. Iterator hat zufällig einen Konstruktor, der ein Array braucht, was Sinn machen würde, wenn ich einen Datensatz hätte, mit dem ich in einem Array arbeiten könnte, aber ich nicht. Ich möchte mit einer unendlichen Sequenz arbeiten.

Es gibt keine .limit, also habe ich vorher versucht, eine .reduce hinzuzufügen, aber die Argumente für .reduce waren noch verwirrender. Ich denke, es sollte eine .toList geben, aber ich wusste, dass es nicht funktionierte, also habe ich es nicht versucht.

Wenn mir jemand zeigen würde, wie man den obigen Java-Code in Lotlin implementiert, würde es sehr helfen.

Antwort

15

Sie können generateSequence Factory-Methode verwenden:

generateSequence(0) { it + 2 }.forEach { println(it) } 

oder für den begrenzten Fall:

generateSequence(0) { it + 2 }.take(100).forEach { println(it) }