Tôi đang cố gắng viết một chương trình đơn giản bằng cách sử dụng RxJava để tạo chuỗi số tự nhiên vô hạn. Vì vậy, đến nay tôi đã tìm thấy hai cách để tạo chuỗi các số bằng cách sử dụng Observable.timer() và Observable.interval(). Tôi không chắc chắn nếu các chức năng này là đúng cách để tiếp cận vấn đề này. Tôi đã mong đợi một hàm đơn giản giống như chúng ta có trong Java 8 để tạo ra các số tự nhiên vô hạn.Tạo chuỗi số tự nhiên vô hạn bằng RxJava
IntStream.iterate (1, value -> value +1) .forEach (System.out :: println);
Tôi đã thử sử dụng IntStream với Observable nhưng điều đó không hoạt động chính xác. Nó gửi luồng vô hạn của các số chỉ cho người đăng ký đầu tiên. Làm thế nào tôi có thể tạo một chuỗi số tự nhiên vô hạn?
import rx.Observable;
import rx.functions.Action1;
import java.util.stream.IntStream;
public class NaturalNumbers {
public static void main(String[] args) {
Observable<Integer> naturalNumbers = Observable.<Integer>create(subscriber -> {
IntStream stream = IntStream.iterate(1, val -> val + 1);
stream.forEach(naturalNumber -> subscriber.onNext(naturalNumber));
});
Action1<Integer> first = naturalNumber -> System.out.println("First got " + naturalNumber);
Action1<Integer> second = naturalNumber -> System.out.println("Second got " + naturalNumber);
Action1<Integer> third = naturalNumber -> System.out.println("Third got " + naturalNumber);
naturalNumbers.subscribe(first);
naturalNumbers.subscribe(second);
naturalNumbers.subscribe(third);
}
}
Cảm ơn Mike cho câu trả lời của bạn. Nó sẽ là bất kỳ khác nhau nếu tôi gọi phương thức subscribeOn trong khi tạo Observable thay vì gọi nó ba lần như được hiển thị trong đoạn mã trên. Tôi đã thử nghiệm nó và hành vi là như nhau nhưng vẫn muốn xác nhận. – Shekhar
Vấn đề này được xác định chính xác, nhưng đây là lời khuyên xấu - bạn không bao giờ nên sử dụng 'subscribeOn' để giải quyết vấn đề này - xem câu trả lời của tôi cho lý do. –
Gọi 'hủy đăng ký' theo cách này ngắt kết nối thuê bao, vì vậy nó dừng nhận tin nhắn, nhưng nó không dừng vòng lặp của máy phát điện, điều này liên tục chạy vô hạn việc ăn năng lượng CPU của bạn. Xem câu trả lời của tôi về cách giải quyết cả hai mặt của câu chuyện. –