Bagikan melalui


ICollector Antarmuka

Definisi

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 StringBuilderinformasi 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 java.lang.System.identityHashCode() untuk instans yang dibungkus.

(Diperoleh dari IJavaPeerable)
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 Set dari Collector.Characteristics yang menunjukkan karakteristik Kolektor ini.

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 Dispose(); jika tidak, tidak melakukan apa pun.

(Diperoleh dari IJavaPeerable)
Finalized()

Dipanggil ketika instans telah diselesaikan.

(Diperoleh dari IJavaPeerable)
Finisher()

Lakukan transformasi akhir dari jenis A akumulasi menengah ke jenis Rhasil akhir .

Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[])

Mengembalikan baru Collector yang dijelaskan oleh fungsi , , accumulator, combinerdan finisher yang diberikansupplier.

Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[])

Mengembalikan baru Collector yang dijelaskan oleh fungsi , , accumulator, combinerdan finisher yang diberikansupplier.

SetJniIdentityHashCode(Int32)

Atur nilai yang dikembalikan oleh JniIdentityHashCode.

(Diperoleh dari IJavaPeerable)
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 PeerReference.

(Diperoleh dari IJavaPeerable)
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.

Berlaku untuk