ISpliterator 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.
Objek untuk melintas dan mempartisi elemen sumber.
[Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public interface ISpliterator : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type ISpliterator = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Turunan
- Atribut
- Penerapan
Keterangan
Objek untuk melintas dan mempartisi elemen sumber. Sumber elemen yang dicakup oleh Spliterator bisa, misalnya, array, Collection
, saluran IO, atau fungsi generator.
Pemisah dapat melintasi elemen secara individual (#tryAdvance tryAdvance()
) atau secara berurutan secara massal (#forEachRemaining forEachRemaining()
).
Pemisah juga dapat mempartisi beberapa elemennya (menggunakan #trySplit
) sebagai Pemisah lain, untuk digunakan dalam operasi yang mungkin paralel. Operasi menggunakan Spliterator yang tidak dapat membagi, atau melakukannya dengan cara yang sangat tidak seimbang atau tidak efisien, tidak mungkin mendapat manfaat dari paralelisme. Elemen pembuangan traversal dan pemisahan; setiap Spliterator hanya berguna untuk satu komputasi massal.
Spliterator juga melaporkan serangkaian #characteristics()
struktur, sumber, dan elemennya dari antara #ORDERED
, , #DISTINCT
, #SIZED
#SORTED
, #NONNULL
, #IMMUTABLE
, , #CONCURRENT
, dan #SUBSIZED
. Ini dapat digunakan oleh klien Spliterator untuk mengontrol, mengkhususkan, atau menyederhanakan komputasi. Misalnya, Spliterator untuk akan melaporkan SIZED
, Spliterator untuk Set
akan melaporkan DISTINCT
, dan Spliterator untuk SortedSet
juga akan melaporkan SORTED
.Collection
Karakteristik dilaporkan sebagai set bit bersatu sederhana.
Beberapa karakteristik juga membatasi perilaku metode; misalnya jika ORDERED
, metode traversal harus sesuai dengan urutan yang didokumenkan. Karakteristik baru dapat didefinisikan di masa mendatang, sehingga implementor tidak boleh menetapkan arti ke nilai yang tidak tercantum.
"mengikat">Pemisah yang tidak melaporkan <c>IMMUTABLE</c> atau <c>CONCURRENT</c> diharapkan memiliki kebijakan terdokumentasi mengenai: ketika pemisah <em>mengikat</em> ke sumber elemen; dan deteksi gangguan struktural sumber elemen yang terdeteksi setelah pengikatan. <>Pemisah pengikatan< terlambat/em> mengikat ke sumber elemen pada titik traversal pertama, pemisahan pertama, atau kueri pertama untuk perkiraan ukuran, bukan pada saat Spliterator dibuat. Pemisah yang bukan <pengikatan>< terlambat/em> mengikat ke sumber elemen pada titik konstruksi atau pemanggilan pertama metode apa pun. Modifikasi yang dilakukan pada sumber sebelum pengikatan tercermin ketika Spliterator dilalui. Setelah mengikat Spliterator harus, berdasarkan upaya terbaik, melemparkan ConcurrentModificationException
jika gangguan struktural terdeteksi. Pemisah yang melakukan ini disebut <em>fail-fast</em>. Metode traversal massal (#forEachRemaining forEachRemaining()
) dari Spliterator dapat mengoptimalkan traversal dan memeriksa gangguan struktural setelah semua elemen dilalui, daripada memeriksa per elemen dan segera gagal.
Pemisah dapat memberikan perkiraan jumlah elemen yang tersisa melalui #estimateSize
metode . Idealnya, seperti yang tercermin dalam karakteristik #SIZED
, nilai ini sesuai persis dengan jumlah elemen yang akan ditemui dalam traversal yang berhasil. Namun, bahkan ketika tidak diketahui secara pasti, perkiraan nilai mungkin masih berguna untuk operasi yang dilakukan pada sumbernya, seperti membantu menentukan apakah lebih baik untuk dibagi lebih jauh atau melintasi elemen yang tersisa secara berurutan.
Meskipun utilitasnya jelas dalam algoritma paralel, pemisah diharapkan tidak aman untuk utas; sebaliknya, implementasi algoritma paralel menggunakan pemisah harus memastikan bahwa pemisah hanya digunakan oleh satu utas pada satu waktu. Ini umumnya mudah dicapai melalui <>utas serial-kurungan</em>, yang sering merupakan konsekuensi alami dari algoritma paralel khas yang bekerja dengan penguraian rekursif. Panggilan #trySplit()
utas dapat menyerahkan Spliterator yang dikembalikan ke utas lain, yang pada gilirannya dapat melintasi atau membagi pemisah lebih lanjut. Perilaku pemisahan dan traversal tidak terdefinisi jika dua utas atau lebih beroperasi secara bersamaan pada pemisah yang sama. Jika utas asli memberi tangan pemisah ke utas lain untuk diproses, yang terbaik adalah jika handoff itu terjadi sebelum elemen apa pun dikonsumsi dengan #tryAdvance(Consumer) tryAdvance()
, karena jaminan tertentu (seperti akurasi #estimateSize()
untuk SIZED
pemisah) hanya berlaku sebelum traversal dimulai.
Spesialisasi subjenis Spliterator
primitif disediakan untuk OfInt int
nilai , OfLong long
, dan OfDouble double
. Implementasi default subjenis dan Spliterator#tryAdvance(java.util.function.Consumer)
Spliterator#forEachRemaining(java.util.function.Consumer)
nilai primitif kotak ke instans kelas pembungkus yang sesuai. Tinju tersebut dapat merusak keuntungan performa apa pun yang diperoleh dengan menggunakan spesialisasi primitif. Untuk menghindari tinju, metode berbasis primitif yang sesuai harus digunakan. Misalnya, Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer)
dan Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer)
harus digunakan dalam preferensi ke Spliterator.OfInt#tryAdvance(java.util.function.Consumer)
dan Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)
. Traversal nilai primitif menggunakan metode #tryAdvance tryAdvance()
berbasis tinju dan #forEachRemaining(java.util.function.Consumer) forEachRemaining()
tidak memengaruhi urutan nilai, diubah menjadi nilai kotak, ditemui.
Ditambahkan dalam 1.8.
Dokumentasi Java untuk java.util.Spliterator
.
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
Comparator |
Jika sumber Spliterator ini adalah |
ExactSizeIfKnown |
Metode kenyamanan yang mengembalikan |
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
Characteristics() |
Mengembalikan sekumpulan karakteristik Pemisah ini dan elemennya. |
Disposed() |
Dipanggil ketika instans telah dibuang. (Diperoleh dari IJavaPeerable) |
DisposeUnlessReferenced() |
Jika tidak ada referensi yang luar biasa untuk instans ini, maka panggilan |
EstimateSize() |
Mengembalikan perkiraan jumlah elemen yang akan ditemui oleh |
Finalized() |
Dipanggil ketika instans telah diselesaikan. (Diperoleh dari IJavaPeerable) |
ForEachRemaining(IConsumer) |
Melakukan tindakan yang diberikan untuk setiap elemen yang tersisa, secara berurutan di utas saat ini, hingga semua elemen telah diproses atau tindakan melemparkan pengecualian. |
HasCharacteristics(Int32) |
Mengembalikan |
SetJniIdentityHashCode(Int32) |
Atur nilai yang dikembalikan oleh |
SetJniManagedPeerState(JniManagedPeerStates) |
Objek untuk melintas dan mempartisi elemen sumber. (Diperoleh dari IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Atur nilai yang dikembalikan oleh |
TryAdvance(IConsumer) |
Jika elemen yang tersisa ada, lakukan tindakan yang diberikan di atasnya, mengembalikan |
TrySplit() |
Jika pemisah ini dapat dipartisi, mengembalikan spliterator yang mencakup elemen, yang akan, setelah kembali dari metode ini, tidak dicakup oleh Spliterator ini. |
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) |
Objek untuk melintas dan mempartisi elemen sumber. |
GetJniTypeName(IJavaPeerable) |
Objek untuk melintas dan mempartisi elemen sumber. |