2017-09-12 34 views
7

Như được thảo luận trong this question, việc triển khai distinct() có thể sử dụng thuật toán hiệu quả hơn khi luồng hoạt động trên được biết theo thời gian chạy cần sắp xếp. Làm cách nào chúng tôi có thể đạt được kết quả tương tự nếu chúng tôi biết rằng luồng được sắp xếp (ví dụ: do nguồn này đến từ nguồn dữ liệu được sắp xếp trước, chẳng hạn như truy vấn SQL với mệnh đề order by) nhưng không bị gắn cờ như vậy? Có một hoạt động unordered() loại bỏ các cờ đặt hàng, nhưng theo như tôi thấy không có cách nào nói cho hệ thống biết rằng dữ liệu đã được đặt hàng bên ngoài.Dòng Java: khác biệt() trên luồng được sắp xếp trước?

Trả lời

3

Bạn có thể tạo spliterator của bạn xung quanh một bộ sưu tập hiện có ví dụ:

List<Integer> list = Arrays.asList(1, 2, 3, 4); 

    Spliterator<Integer> sp = Spliterators.spliterator(list, Spliterator.SORTED); 

    System.out.println(sp.hasCharacteristics(Spliterator.SORTED)); // true 
+0

Các suối Tôi đang sử dụng được sản xuất bởi một thư viện của bên thứ ba, vì vậy tôi không tạo spliterators bản thân mình cả. Tôi đoán tôi * có thể * sử dụng một số loại spliterator proxy, mà có thể làm việc. – Jules

+0

Vâng, một bộ phân tách gói báo cáo các đặc điểm khác nhau có vẻ là giải pháp duy nhất. – Holger

Các vấn đề liên quan