ICollector Antarmuka
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Operasi pengurangan yang dapat diubah yang mengumpulkan elemen input ke dalam kontainer hasil yang dapat diubah, secara opsional mengubah hasil akumulasi menjadi representasi akhir setelah semua elemen input diproses.
[Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })]
public interface ICollector : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })>]
type ICollector = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Atribut
- Penerapan
Keterangan
Operasi pengurangan yang dapat diubah yang mengumpulkan elemen input ke dalam kontainer hasil yang dapat diubah, secara opsional mengubah hasil akumulasi menjadi representasi akhir setelah semua elemen input diproses. Operasi pengurangan dapat dilakukan secara berurutan atau paralel.
Contoh operasi pengurangan yang dapat diubah meliputi: mengumpulkan elemen ke dalam Collection
; menggabungkan string menggunakan StringBuilder
informasi ringkasan komputasi tentang elemen seperti jumlah, min, maks, atau rata-rata; menghitung ringkasan "tabel pivot" seperti "transaksi bernilai maksimum oleh penjual", dll. Collectors
Kelas ini menyediakan implementasi dari banyak pengurangan umum yang dapat diubah.
Collector
ditentukan oleh empat fungsi yang bekerja sama untuk mengumpulkan entri ke dalam kontainer hasil yang dapat diubah, dan secara opsional melakukan transformasi akhir pada hasilnya. Mereka adalah: <pembuatan ul><li>dari kontainer hasil baru (#supplier()
)</li li><>yang menggabungkan elemen data baru ke dalam kontainer hasil (#accumulator()
)</li li>><yang menggabungkan dua kontainer hasil menjadi satu (#combiner()
)</li li<>>yang melakukan transformasi akhir opsional pada kontainer (#finisher()
)</li></ul>
Kolektor juga memiliki serangkaian karakteristik, seperti Characteristics#CONCURRENT
, yang memberikan petunjuk yang dapat digunakan oleh implementasi pengurangan untuk memberikan performa yang lebih baik.
Implementasi berurutan dari pengurangan menggunakan kolektor akan membuat satu kontainer hasil menggunakan fungsi pemasok, dan memanggil fungsi akumulator sekali untuk setiap elemen input. Implementasi paralel akan mempartisi input, membuat kontainer hasil untuk setiap partisi, mengakumulasi konten setiap partisi ke dalam subresult untuk partisi tersebut, lalu menggunakan fungsi combiner untuk menggabungkan subresult ke dalam hasil gabungan.
Untuk memastikan bahwa eksekusi berurutan dan paralel menghasilkan hasil yang setara, fungsi kolektor harus memenuhi <>identitas</em> dan batasan associativity.
Batasan identitas mengatakan bahwa untuk hasil yang terakumulasi sebagian, menggabungkannya dengan kontainer hasil kosong harus menghasilkan hasil yang setara. Artinya, untuk hasil a
akumulasi sebagian yang merupakan hasil dari serangkaian akumulator dan pemanggilan gabungan, a
harus setara dengan combiner.apply(a, supplier.get())
.
Batasan associativity mengatakan bahwa memisahkan komputasi harus menghasilkan hasil yang setara. Artinya, untuk elemen t1
input apa pun dan t2
, hasilnya r1
dan r2
dalam komputasi di bawah ini harus setara:
{@code
A a1 = supplier.get();
accumulator.accept(a1, t1);
accumulator.accept(a1, t2);
R r1 = finisher.apply(a1); // result without splitting
A a2 = supplier.get();
accumulator.accept(a2, t1);
A a3 = supplier.get();
accumulator.accept(a3, t2);
R r2 = finisher.apply(combiner.apply(a2, a3)); // result with splitting
}
Untuk kolektor yang tidak memiliki UNORDERED
karakteristik, dua hasil a1
akumulasi dan a2
setara jika finisher.apply(a1).equals(finisher.apply(a2))
. Untuk kolektor yang tidak berurutan, kesetaraan dilonggarkan untuk memungkinkan ketidaksetaraan yang terkait dengan perbedaan secara berurutan. (Misalnya, pengumpul yang tidak berurutan yang mengumpulkan elemen ke List
akan mempertimbangkan dua daftar yang setara jika berisi elemen yang sama, mengabaikan urutan.)
Pustaka yang menerapkan pengurangan berdasarkan Collector
, seperti Stream#collect(Collector)
, harus mematuhi batasan berikut: <ul<>li>Argumen pertama yang diteruskan ke fungsi akumulator, kedua argumen yang diteruskan ke fungsi combiner, dan argumen yang diteruskan ke fungsi finisher harus merupakan hasil dari pemanggilan sebelumnya dari fungsi pemasok hasil, akumulator, atau gabungan.</li li><>Implementasi tidak boleh melakukan apa pun dengan hasil salah satu fungsi pemasok hasil, akumulator, atau combiner selain meneruskannya lagi ke fungsi akumulator, combiner, atau finisher, atau mengembalikannya ke pemanggil operasi pengurangan.</li><li>Jika hasil diteruskan ke fungsi combiner atau finisher, dan objek yang sama tidak dikembalikan dari fungsi tersebut, itu tidak pernah digunakan lagi.</li li><>Setelah hasil diteruskan ke fungsi combiner atau finisher, itu tidak pernah diteruskan ke fungsi akumulator lagi.</li li><>Untuk pengumpul non-bersamaan, hasil apa pun yang dikembalikan dari fungsi pemasok hasil, akumulator, atau combiner harus dibatasi secara serial. Ini memungkinkan pengumpulan terjadi secara paralel tanpa Collector
perlu menerapkan sinkronisasi tambahan apa pun. Implementasi pengurangan harus mengelola bahwa input dipartisi dengan benar, bahwa partisi diproses dalam isolasi, dan penggabungan hanya terjadi setelah akumulasi selesai.</li li><>Untuk pengumpul bersamaan, implementasi bebas untuk (tetapi tidak diharuskan) menerapkan pengurangan secara bersamaan. Pengurangan bersamaan adalah salah satu di mana fungsi akumulator dipanggil secara bersamaan dari beberapa utas, menggunakan kontainer hasil yang dapat dimodifikasi bersamaan yang sama, daripada menjaga hasilnya terisolasi selama akumulasi. Pengurangan bersamaan hanya boleh diterapkan jika pengumpul memiliki Characteristics#UNORDERED
karakteristik atau jika data asal tidak diurutkan.</li></ul>
Selain implementasi yang telah ditentukan sebelumnya dalam Collectors
, metode #of(Supplier, BiConsumer, BinaryOperator, Characteristics...)
pabrik statis dapat digunakan untuk membangun kolektor. Misalnya, Anda dapat membuat kolektor yang mengakumulasi widget ke dalam TreeSet
dengan:
{@code
Collector<Widget, ?, TreeSet<Widget>> intoSet =
Collector.of(TreeSet::new, TreeSet::add,
(left, right) -> { left.addAll(right); return left; });
}
(Perilaku ini juga diimplementasikan oleh kolektor Collectors#toCollection(Supplier)
yang telah ditentukan sebelumnya ).
Ditambahkan dalam 1.8.
Dokumentasi Java untuk java.util.stream.Collector
.
Bagian halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Proyek Sumber Terbuka Android dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Atribusi Creative Commons 2.5.
Properti
Handle |
Mendapatkan nilai JNI dari objek Android yang mendasar. (Diperoleh dari IJavaObject) |
JniIdentityHashCode |
Mengembalikan nilai |
JniManagedPeerState |
Status serekan terkelola. (Diperoleh dari IJavaPeerable) |
JniPeerMembers |
Akses anggota dan dukungan pemanggilan. (Diperoleh dari IJavaPeerable) |
PeerReference |
Mengembalikan instans objek Java yang dibungkus JniObjectReference . (Diperoleh dari IJavaPeerable) |
Metode
Accumulator() |
Fungsi yang melipat nilai ke dalam kontainer hasil yang dapat diubah. |
Characteristics() |
Mengembalikan |
Combiner() |
Fungsi yang menerima dua hasil parsial dan menggabungkannya. |
Disposed() |
Dipanggil ketika instans telah dibuang. (Diperoleh dari IJavaPeerable) |
DisposeUnlessReferenced() |
Jika tidak ada referensi yang luar biasa untuk instans ini, maka panggilan |
Finalized() |
Dipanggil ketika instans telah diselesaikan. (Diperoleh dari IJavaPeerable) |
Finisher() |
Lakukan transformasi akhir dari jenis |
Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[]) |
Mengembalikan baru |
Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[]) |
Mengembalikan baru |
SetJniIdentityHashCode(Int32) |
Atur nilai yang dikembalikan oleh |
SetJniManagedPeerState(JniManagedPeerStates) |
Operasi pengurangan yang dapat diubah yang mengumpulkan elemen input ke dalam kontainer hasil yang dapat diubah, secara opsional mengubah hasil akumulasi menjadi representasi akhir setelah semua elemen input diproses. (Diperoleh dari IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Atur nilai yang dikembalikan oleh |
Supplier() |
Fungsi yang membuat dan mengembalikan kontainer hasil baru yang dapat diubah. |
UnregisterFromRuntime() |
Batalkan pendaftaran instans ini sehingga runtime tidak akan mengembalikannya dari pemanggilan di masa mendatang Java.Interop.JniRuntime+JniValueManager.PeekValue . (Diperoleh dari IJavaPeerable) |
Metode Ekstensi
JavaCast<TResult>(IJavaObject) |
Melakukan konversi jenis yang diperiksa runtime Bahasa Umum Android. |
JavaCast<TResult>(IJavaObject) |
Operasi pengurangan yang dapat diubah yang mengumpulkan elemen input ke dalam kontainer hasil yang dapat diubah, secara opsional mengubah hasil akumulasi menjadi representasi akhir setelah semua elemen input diproses. |
GetJniTypeName(IJavaPeerable) |
Operasi pengurangan yang dapat diubah yang mengumpulkan elemen input ke dalam kontainer hasil yang dapat diubah, secara opsional mengubah hasil akumulasi menjadi representasi akhir setelah semua elemen input diproses. |