Pertanyaan Peta aliran Jawa dan mengumpulkan - urutan wadah yang dihasilkan


List<MyObject> myList = new ArrayList<>(); 
//populate myList here

List<String> nameList = myList.stream()
        .map(MyObject::getName)
        .collect(Collectors.toList());

Dalam kode di atas, dapatkah saya mengharapkan urutan MyObject nama-nama di nameList selalu sama dengan urutan myList?


32
2018-05-15 11:38


asal


Jawaban:


Ya, Anda dapat mengharapkan ini bahkan jika Anda menggunakan aliran paralel selama Anda tidak secara eksplisit mengubahnya menjadi unordered() mode.

Urutan tidak pernah berubah dalam mode sekuensial, tetapi dapat berubah dalam mode paralel. Aliran menjadi tidak teratur baik:

  • Jika Anda secara eksplisit mengubahnya menjadi mode unordered via unordered() panggilan
  • Jika sumber aliran melaporkan bahwa itu tidak berurutan (misalnya, HashSet streaming tidak teratur karena pesanan bergantung pada implementasi dan Anda tidak dapat mengandalkannya)
  • Jika Anda menggunakan operasi terminal tanpa nomor (misalnya, forEach() operasi atau pengumpulan ke kolektor tak teratur seperti toSet())

Dalam kasus Anda, tidak ada satu pun ketentuan ini yang dipenuhi, sehingga aliran Anda dipesan.


41
2018-05-15 11:42