Bagikan melalui


ISpliterator Antarmuka

Definisi

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 intnilai , 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 #SORTED oleh Comparator, mengembalikannya Comparator.

ExactSizeIfKnown

Metode kenyamanan yang mengembalikan #estimateSize() jika Spliterator ini adalah #SIZED, atau -1.

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

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

(Diperoleh dari IJavaPeerable)
EstimateSize()

Mengembalikan perkiraan jumlah elemen yang akan ditemui oleh #forEachRemaining traversal, atau mengembalikan Long#MAX_VALUE jika tak terbatas, tidak diketahui, atau terlalu mahal untuk dihitung.

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 true jika Spliterator #characteristics ini berisi semua karakteristik yang diberikan.

SetJniIdentityHashCode(Int32)

Atur nilai yang dikembalikan oleh JniIdentityHashCode.

(Diperoleh dari IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Objek untuk melintas dan mempartisi elemen sumber.

(Diperoleh dari IJavaPeerable)
SetPeerReference(JniObjectReference)

Atur nilai yang dikembalikan oleh PeerReference.

(Diperoleh dari IJavaPeerable)
TryAdvance(IConsumer)

Jika elemen yang tersisa ada, lakukan tindakan yang diberikan di atasnya, mengembalikan true; lainnya mengembalikan false.

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.

Berlaku untuk