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); }
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]); }
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));
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!