2016-03-28 25 views
5

Tôi đang bối rối về cách tạo ra một chuỗi vô hạn trong kotlin để sử dụng cho việc đánh giá lười biếng.kotlin chuỗi vô hạn với chức năng lặp

Trong java:

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

nhưng chuỗi dường như nhiều hơn nữa khó hiểu sau đó suối java. Trình xây dựng trình tự rất khó hiểu tài liệu cho nó nói:

/** 
* 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. 
*/ 

nhưng tôi không biết nó có nghĩa là gì bởi một hàm lặp hay cách tạo hàm.

Sequence { iterator(arrayOf<Int>()) } 
     .forEach { print(it) } 

Tôi có tính năng biên dịch này nhưng rõ ràng là không in bất kỳ thứ gì. Tôi không nghĩ rằng chức năng iterator của tôi làm cho bất kỳ ý nghĩa. Nó muốn một hàm không có đối số và trả về một trình lặp, mà không giống như hàm java .iterate. iterator xảy ra để có một hàm tạo có một mảng, điều này sẽ có ý nghĩa nếu tôi có một tập dữ liệu để làm việc với trong một mảng nhưng không. Tôi muốn làm việc với một chuỗi vô hạn.

Không có .limit, vì vậy trước đây tôi đã cố thêm một .reduce nhưng các đối số cho .reduce thậm chí còn khó hiểu hơn. Tôi nghĩ rằng nên có một .toList nhưng tôi biết nó đã không làm việc vì vậy tôi đã không thử nó.

Nếu ai đó chỉ cho tôi cách triển khai mã java ở trên trong lotlin, nó sẽ giúp ích rất nhiều.

Trả lời

15

Bạn có thể sử dụng phương pháp generateSequence nhà máy:

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

hoặc đối với trường hợp có giới hạn:

generateSequence(0) { it + 2 }.take(100).forEach { println(it) } 
Các vấn đề liên quan