簡體   English   中英

java 流:累積收集器

[英]java streams: accumulated collector

目前,這是我的代碼:

Iterable<Practitioner> referencedPractitioners = this.practitionerRepository.findAllById(
    Optional.ofNullable(patient.getPractitioners())
        .map(List::stream)
        .orElse(Stream.of())
        .map(Reference::getIdPart)
        .collect(Collectors.toList())
    );

如您所見,我正在使用this.practitionerRepository.findAllById(Iterable<String> ids) ,以便使用與數據庫的單一通信來獲取所有內容。

我試圖用這個來改變它:

Optional.ofNullable(patient)
    .map(org.hl7.fhir.r4.model.Patient::getPractitioners)
    .map(List::stream)
    .orElse(Stream.of())
    .map(Reference::getIdPart)
    .collect(????????);

如何在collect方法this.practitionerRepository.findAllById(Iterable<String> ids)用於自定義收集器?

請記住,我需要一次獲取所有實體。 我不能一個一個地得到它們。

您可以為此使用Collectors.collectingAndThen(Collector<T,A,R> downstream, Function<R,RR> finisher)專用收集器。

  1. 使用 Collector.toList() 收集器制作一個 ID 列表,然后
  2. 傳遞一個參考practitionerRepository::findAllById以從List<String>轉換為Iterable<Practitioner>

例子:

Iterable<Practitioner> referencedPractitioners = Optional.ofNullable(patient)
      .map(Patient::getPractitioners)
      .map(List::stream)
      .orElseGet(Stream::of)
      .map(Reference::getIdPart)
      .collect(Collectors.collectingAndThen(toList(), practitionerRepository::findAllById));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM