

Fluks siri, di mana fluks kedua dicipta dengan cepat dengan nilai terakhir fluks pertama?
Editor PHP Shinichi boleh menerangkan konsep ini dengan ringkas dan jelas apabila dia menerangkan "Fluks bercantum, di mana fluks kedua dicipta serta-merta dengan nilai terakhir fluks pertama". Dalam siri fluks, nilai fluks pertama dihantar ke fluks kedua, dan nilai fluks kedua dijana dengan cepat berdasarkan nilai terakhir fluks pertama. Mekanisme ini boleh digunakan untuk melaksanakan pemindahan dan pemprosesan data dinamik, menjadikan aliran program lebih fleksibel dan cekap. Dengan menggunakan fluks bersiri secara rasional, prestasi dan kebolehselenggaraan program boleh dipertingkatkan, dan pengalaman pengguna yang lebih baik boleh disediakan.
Kandungan soalan
Saya syak ini mesti pendua, tetapi saya tersalah google istilah.
Saya mempunyai dua fluks a dan b, tetapi b hanya boleh dibuat menggunakan nilai terakhir a.
Saya ingin mencipta fluks yang pada asasnya adalah gabungan a dan b , tetapi penciptaan b ditangguhkan sehingga kita mendapat nilai terakhir a .
Mungkin, ia kelihatan seperti ini:
fluxC = fluxA.concatWith(lastA -> createFluxB(lastA))
Penyelesaian
Saya tidak tahu sama ada terdapat sebarang fungsi dalam perpustakaan yang melakukan perkara ini.
Namun, anda boleh membuat pengendali sedemikian dengan:
- Cache nilai terkini trafik input
- Buat urutan berikut menggunakan operasi concat standard untuk mendapatkan nilai terakhir daripada aliran cache.
Nota: Ia sepatutnya tidak mempunyai banyak overhed kerana operasi hanya menyimpan satu nilai pada satu masa dan bahagian kedua algoritma harus terus mengambil nilai cache tanpa mencetuskan fluks sumber terbalik.
Berikut ialah contoh pelaksanaan dan ujian:
import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; public class TestConcatLast { /** * Create a stream that emit all elements from input flux, * followed by all items from a flux created by provided function. * Input function is triggered using last element of source flux as input. * * @param source The flux providing elements of the first part of the concatenation. * @param createFromLastElement A function that provides the tail of the concatenation from a given element. * It will be triggered <em>at most once</em> using the last element of input flux. * @param errorIfSourceEmpty If true and input stream is empty, the returned flow will trigger an error. * If false, an empty flux is produced if input is empty. */ public <T> Flux<T> concatLast(Flux<T> source, boolean errorIfSourceEmpty, Function<T, Flux<T>> createFromLastElement) { var sourceWithLatestCached = source.cache(1); final Mono<T> deferLast = Mono.defer(errorIfSourceEmpty ? sourceWithLatestCached::last : sourceWithLatestCached::next); return sourceWithLatestCached.concatWith( deferLast.flatMapMany(createFromLastElement) ); } @Test public void testConcat() { var nextExpectedElement = new AtomicInteger(1); var elts = Flux.just(1, 2, 3, 4) // Check cache works and no element has been fetched back from source .doOnNext(i -> { assert nextExpectedElement.compareAndSet(i, i+1); }); var concatenated = concatLast(elts, true, i -> Flux.just(i + 1, i + 2, i + 3)); StepVerifier.create(concatenated) .expectNext(1, 2, 3, 4, 5, 6, 7) .verifyComplete(); } }
Atas ialah kandungan terperinci Fluks siri, di mana fluks kedua dicipta dengan cepat dengan nilai terakhir fluks pertama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
