Katakanlah saya memiliki dua Flux sebagai berikut:

    Flux<Integer> f1 = Flux.just(10,20,30,40);
    Flux<Integer> f2 = Flux.just(100,200,300,400);

Sekarang yang saya inginkan adalah menggabungkan fluks ini menjadi satu Fluks atau Tuple dari kedua Fluks, yang akan memiliki elemen kedua Fluks dalam satu Fluks.

Saya mencoba yang berikut ini menggunakan metode zipwith:

  Flux<Integer, Integer> zipped = f1.zipWith(f2,
                                            (one, two) ->  one + "," +two)
                                    .subscribe();

Tapi ini memberikan kesalahan waktu kompilasi:

 Incorrect number of arguments for type Flux<T>; it cannot be parameterized with arguments <Integer, Integer>

Bagaimana saya bisa mencapai ini? Silakan menyarankan.

1
KayV 5 Januari 2018, 10:34

1 menjawab

Jawaban Terbaik

Flux hanya memiliki argumen tipe tunggal, jadi Flux<Integer,Integer> tidak mungkin, dan saya tidak yakin apa yang ingin Anda capai dengan one + "," + two, tetapi tipe ekspresi ini adalah String.

Jadi, intinya, Anda memetakan dua bilangan bulat ke sebuah String, jadi tipe zipped seharusnya Flux<String>.

Atau, Anda dapat memetakan ke kelas Tuple khusus buatan Anda sendiri (atau mungkin dari perpustakaan yang Anda gunakan):

public class Pair<A,B> {
    private final A first;

    private final B second;

    public Pair(A first, B second) {
        this.first = first;
        this.second = second;
    }

    public A getFirst() {
        return first;
    }

    public B getSecond() {
        return second;
    }
}

Anda kemudian dapat memetakan ini sebagai berikut:

Flux<Integer> f1 = Flux.just(10,20,30,40);
Flux<Integer> f2 = Flux.just(100,200,300,400);

Flux<Pair<Integer,Integer>> result = f1.zipWith(f2,
    (one, two) ->  new Pair<>(one, two));

Atau bahkan lebih pendek:

Flux<Pair<Integer,Integer>> result = f1.zipWith(f2, Pair::new);
3
Jeroen Steenbeeke 5 Januari 2018, 07:56