Pengenalan
Mengakses indeks semasa mengulang strim dalam Java 8 boleh tugas yang membosankan, terutamanya jika dibandingkan dengan rakan LINQnya. Artikel ini meneroka cara ringkas dan cekap untuk mencapai kefungsian ini.
Penyelesaian Perantaraan
Satu pendekatan ialah menggabungkan aliran indeks dengan aliran elemen, menggunakan kaedah zip. Walau bagaimanapun, kaedah ini telah sama ada dialihkan atau dialih keluar, menjadikan pendekatan ini kurang boleh diakses.
Cara Paling Bersih: Daripada Indeks
Penyelesaian yang lebih diperkemas adalah bermula dengan aliran indeks. Ini boleh dicapai menggunakan IntStream.range() dan menyediakan titik permulaan yang mudah untuk operasi penapisan dan pemetaan:
String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"}; IntStream.range(0, names.length) .filter(i -> names[i].length() <= i) .mapToObj(i -> names[i]) .collect(Collectors.toList());
Menggunakan Indeks Boleh Ubah
Alternatif lain ialah untuk mengekalkan kaunter ad hoc menggunakan objek boleh ubah seperti AtomicInteger. Pendekatan ini menyerupai tradisional untuk gelung:
String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"}; AtomicInteger index = new AtomicInteger(); List<String> list = Arrays.stream(names) .filter(n -> n.length() <= index.incrementAndGet()) .collect(Collectors.toList());
Awas untuk Aliran Selari
Adalah penting untuk ambil perhatian bahawa menggunakan kaedah terakhir ini pada aliran selari boleh memperkenalkan isu, kerana item mungkin tidak diproses mengikut urutan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulang Dengan Cekap Melalui Strim Java 8 dan Indeks Akses?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!