Java List to Reactor Flux to Identity Map

Я пытаюсь реализовать несколько простых Spring Boot GraphQL BatchMapping.

The @BatchMappingполучает, а затем вызывает @Repositoryи превращает результат в Map<Book, Author>. Я изо всех сил использую Reactor Fluxа также Mono.

      @BatchMapping
Mono<Map<Book, Author>> author(List<Book> books) {
  List<String> authorIds = books.stream().map(book -> book.authorId).toList();

  Flux<Author> authors = authorRepository.findAllById(authorIds);

  return authors.mapToTheBooksInTheCorrectOrder???();
}

У каждого есть один , но несколько s могут иметь один и тот же .

Я хотел бы вернуть (точнее a ), где каждый ключBookи значение соответствующее.

Вы можете предположить, что s внутри (возвращается authorRepository.findAllById) уникальны, и что возвращаемый Authors имеют тот же порядок (первое появление), что и authorIdиз :

      book1 = { id: "1", name: "A Scanner Darkly", authorId = "2" }
book2 = { id: "2", name: "High Fidelity", authorId = "1" }
book3 = { id: "3", name: "The Man In The High Castle", authorId = "2" }

приведет к:

      authors = [
  { id: "2", name: "Philip K. Dick" }
  { id: "1", name: "Nick Hornby" } 
]

Другими словами:

  • за каждую запись в List<Book>создать ключ в Map
  • а затем получить соответствующее значение из Flux<Author>

Результат метода должен быть (для этого примера):

      {
  book1 : author2,
  book2 : author1,
  book3 : author2
}

Все завернуто в Mono<Map>.

0 ответов

Другие вопросы по тегам