Pertanyaan Bagaimana cara melakukan fungsi Stream pada Iterable? [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Di Java 8, the Stream kelas tidak memiliki metode untuk membungkus suatu Iterable.

Sebaliknya, saya memperoleh Spliterator dari Iterable dan kemudian memperoleh Stream dari StreamSupport seperti ini:

boolean parallel = true;

StreamSupport.stream(spliterator(), parallel)
                .filter(Row::isEmpty)
                .collect(Collectors.toList())
                .forEach(this::deleteRow);

Apakah ada cara lain untuk menghasilkan Stream operasi pada Iterable bahwa saya hilang?


32
2017-12-01 08:24


asal


Jawaban:


Pertanyaan serupa saya ditandai sebagai duplikat, tapi di sini adalah metode pembantu yang saya gunakan untuk menghindari beberapa boiler:

public static <T> Stream<T> stream(Iterable<T> in) {
    return StreamSupport.stream(in.spliterator(), false);
}

public static <T> Stream<T> parallelStream(Iterable<T> in) {
    return StreamSupport.stream(in.spliterator(), true);
}

36
2018-04-04 18:21



Apa yang kamu gambarkan aku s cara mendapatkan aliran dari Iterable. Itu sebabnya mereka menambahkan metode spliterator () ke Iterable. Saya telah melakukan konversi yang sama dan tidak melihat cara lain.

[UPDATE] Mungkin ini jawaban lainnya akan memberikan klarifikasi pada "mengapa."


1
2017-12-01 10:38



Saya tahu ini tidak secara langsung menjawab pertanyaan Anda, tetapi sejumlah sumber yang layak seperti koleksi sekarang memiliki metode untuk mendapatkan objek sebagai aliran juga.

Saya pikir bahwa gesekan yang akan Anda hadapi dengan pertanyaan ini adalah bahwa Iterable adalah serial semantis, sedangkan Spliterator dimaksudkan untuk digunakan secara paralel. Ini mungkin ide yang lebih baik untuk mengimplementasikan Spliterator untuk sumber data yang mendasar yang Anda tertarik jika belum tersedia di JDK karena hanya menggunakan pembungkus di sekitar Iterable tidak akan memungkinkan Anda untuk mendapatkan manfaat yang diberikan oleh API Streaming (seperti pemrosesan paralel).


1
2018-03-27 00:02