Java IntStream lặp lại so với tạo khi nào nên sử dụng cái gì?


19

Có vẻ như IntStream.iteratechỉ là một phiên bản nhẹ đặt hàng cho IntStream.generate. Có đúng không Nếu không, sự khác biệt cốt lõi là gì?

Câu trả lời:


21

Lưu ý chữ ký của họ khác nhau như thế nào:

  • generatemất một IntSupplier, có nghĩa là bạn có nghĩa vụ phải tạo int mà không được cung cấp bất cứ điều gì. Ví dụ sử dụng bao gồm tạo một luồng không đổi có cùng số nguyên, tạo ra một luồng số nguyên ngẫu nhiên. Lưu ý cách mỗi phần tử trong luồng không phụ thuộc vào phần tử trước đó.

  • iteratemất a seedvà a IntUnaryOperator, có nghĩa là bạn phải tạo từng phần tử dựa trên phần tử trước đó . Điều này rất hữu ích để tạo ra một chuỗi xác định theo quy nạp, ví dụ. Trong trường hợp này, mỗi yếu tố được cho là phụ thuộc vào yếu tố trước .


Vì vậy, trường hợp sử dụng của iterate - khi cần lưu trạng thái - đây là sự khác biệt cốt lõi. Tạo nhu cầu lưu trữ trạng thái ở một nơi khác. Và Iterate được ra lệnh, trong khi quá trình tạo không có thứ tự khả thi đối với chứng liệt
JJ Beam

8
  1. IntStream.iteratetrả về một đơn đặt hàngIntStream mặt khác IntStream.generatetrả về một thứ tự không có thứ tựIntStream có thể giúp tăng tốc các đường ống dòng song song.

  2. IntStream.generate được ưu tiên để tạo các giá trị ngẫu nhiên hoặc không đổi như được chỉ định trong Javadoc, tôi đoán rất có thể các đặc tính của luồng được trả về.


5

Bên cạnh thứ tự, cách sử dụng cũng có một chút khác biệt. Hãy xem các chữ ký phương thức:

  • iterate(int seed, IntUnaryOperator f)
  • generate(IntSupplier s)

Iterate đã đưa ra giá trị bắt đầu rõ ràng dưới dạng tham số và toán tử đơn nguyên được sử dụng để tạo giá trị tiếp theo từ trước đó. Ở đây toán tử có thể dễ dàng bất biến mà không có trạng thái bên trong và có thể được sử dụng lại ở nhiều nơi song song mà không có vấn đề gì.

Tạo nhà cung cấp sử dụng. Những người này có thể cung cấp số không đổi hoặc ngẫu nhiên hoặc cần phải có trạng thái nội bộ để cung cấp chuỗi như (1, 2, 3, ...).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.