Как собрать два объекта Flux ‹› в один

Я как бы новичок в реактивном программировании. Побывав на некоторых докладах о реакторе и Spring 5.0, я захотел попробовать эту модель программирования самостоятельно.

У меня есть приложение, которое создает два объекта Flux из разных API с помощью WebClient. Я хочу скомпоновать эти 2 объекта в один и вернуть его пользователю.

Пример кода будет выглядеть так:

public class User {
  private String username;
  //getters and setters
}

public class Address {
  private String street;
  //getters and setters;
}

public class CompleteUser {
  private String username;
  private String address;
  //getters and setters
}

А теперь в моем методе обработчика:

final Flux<User> = WebClient.create()...;
final Flux<Address> = WebClient.create()...;
final Flux<CompleteUser> = //somehow compose this two types into one

Какой метод из API реактора я должен использовать для этого? Я нашел несколько методов для составления объектов, таких как combLatest, однако в этом случае я хочу скомпоновать ровно первый элемент первого потока с первым элементом второго потока и т. Д.


person General_Code    schedule 31.05.2017    source источник


Ответы (1)


Flux.zip статический метод - это именно то, что вам нужно. Для комбинации из 2 источников вы можете указать BiFunction для получения результата.

Flux<CompleteUser> complete = Flux.zip(fluxUser, fluxAddress, (u, a) -> new CompleteUser(u, a));
//if the ctor perfectly matches, you can also use CompleteUser::new
person Simon Baslé    schedule 01.06.2017