Rumah > Java > javaTutorial > Bagaimana untuk Membalikkan Strim Java 8 dengan Cekap?

Bagaimana untuk Membalikkan Strim Java 8 dengan Cekap?

Barbara Streisand
Lepaskan: 2024-10-30 05:57:03
asal
513 orang telah melayarinya

How to Reverse a Java 8 Stream Efficiently?

Menterbalikkan Java 8 Stream

Dalam Java 8, strim menyediakan cara yang berkuasa dan ringkas untuk memanipulasi dan memproses data. Satu operasi biasa ialah membalikkan aliran. Artikel ini meneroka dua kaedah untuk mencapai perkara ini: penyelesaian khusus untuk membalikkan IntStream dan pendekatan generik untuk membalikkan sebarang aliran objek.

Pembalikan IntStream Khusus

Untuk membalikkan IntStream, kaedah tersuai boleh dibuat untuk memetakan julat nilai dalam susunan terbalik. Sebagai contoh, jika kita mempunyai IntStream antara -5 hingga 0, membalikkannya akan menghasilkan aliran 0 hingga -5. Ini boleh dicapai menggunakan kod berikut:

static IntStream revRange(int from, int to) {
    return IntStream.range(from, to)
                    .map(i -> to - i + from - 1);
}
Salin selepas log masuk

Kaedah ini mengelakkan tinju dan menyusun, menghasilkan penyelesaian yang lebih cekap.

Pembalikan Strim Generik

Untuk membalikkan strim mana-mana jenis objek, dua pendekatan boleh digunakan. Yang pertama melibatkan menyimpan elemen aliran dalam tatasusunan dan membacanya dalam susunan terbalik:

@SuppressWarnings("unchecked")
static <T> Stream<T> reverse(Stream<T> input) {
    Object[] temp = input.toArray();
    return (Stream<T>) IntStream.range(0, temp.length)
                                .mapToObj(i -> temp[temp.length - i - 1]);
}
Salin selepas log masuk

Pendekatan ini mudah tetapi memerlukan penciptaan tatasusunan perantaraan.

Teknik lain ialah dengan gunakan pengumpul untuk mengumpul item ke dalam senarai terbalik:

Stream<T> input = ... ;
List<T> output =
    input.collect(ArrayList::new,
                  (list, e) -> list.add(0, e),
                  (list1, list2) -> list1.addAll(0, list2));
Salin selepas log masuk

Pilihan ini juga memerlukan penyimpanan elemen strim, tetapi ia menghilangkan keperluan untuk menyalin dengan menggunakan ArrayList dengan sisipan di hadapan.

Perlu diingat bahawa tiada cara yang "betul" untuk membalikkan strim tanpa menyimpan elemen. Walau bagaimanapun, kaedah yang dibentangkan menyediakan penyelesaian yang cekap dan serba boleh untuk pembalikan IntStream khusus dan pembalikan strim generik.

Atas ialah kandungan terperinci Bagaimana untuk Membalikkan Strim Java 8 dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan