Menterbalikkan Strim dalam Java: Pendekatan Generik dan Khusus
Apabila berurusan dengan strim Java, memahami cara membalikkannya boleh menjadi penting. Mari kita mendalami pendekatan khusus dan generik untuk membalikkan strim.
Pendekatan Khusus: Membalikkan Aliran Int
Untuk membalikkan Aliran Int sambil mengekalkan julatnya, anda boleh menggunakan yang berikut pendekatan:
<code class="java">static IntStream revRange(int from, int to) { return IntStream.range(from, to) .map(i -> to - i + from - 1); }</code>
Kaedah ini mengelakkan operasi tinju dan pengisihan yang tidak perlu.
Pendekatan Generik: Membalikkan Arus Mana-mana Jenis
Untuk aliran jenis sewenang-wenangnya, pada masa ini tiada cara "betul" yang dipratentukan untuk membalikkannya. Walau bagaimanapun, berikut ialah dua pilihan biasa:
1. Membalikkan Menggunakan Tatasusunan:
Kaedah ini menyimpan elemen strim dalam tatasusunan dan mendapatkannya dalam susunan terbalik:
<code class="java">@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]); }</code>
2. Membalikkan Menggunakan Pengumpul:
Kaedah ini menggunakan pengumpul untuk mengumpul elemen dalam senarai terbalik:
<code class="java">Stream<T> input = ... ; List<T> output = input.collect(ArrayList::new, (list, e) -> list.add(0, e), (list1, list2) -> list1.addAll(0, list2));</code>
Pembalikan Cekap Menggunakan ArrayDeque
Disebabkan ketidakcekapan penyalinan O(N^2), kami mengemas kini kod kami yang terdahulu menggunakan ArrayDeque untuk sisipan yang lebih cekap di hadapan:
<code class="java">Deque<String> output = input.collect(Collector.of( ArrayDeque::new, (deq, t) -> deq.addFirst(t), (d1, d2) -> { d2.addAll(d1); return d2; }));</code>
Kaedah ini menghasilkan Deque terbalik, yang boleh ditukar dengan mudah kembali ke Strim atau diulang terus.
Atas ialah kandungan terperinci Bagaimana untuk Membalikkan Strim dalam Java: Pendekatan Khusus dan Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!